From 7fb9b95033eec5a14a012325cdddc7b1e04201a3 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Thu, 15 Mar 2012 18:24:42 -0400 Subject: [PATCH] --- yaml --- r: 297847 b: refs/heads/master c: 5df4235ea15bd39f441ef334d8329b3d46b2cc57 h: refs/heads/master i: 297845: 59819293977d4265a206bf6fd3b05ef2f34f56f7 297843: d693a443a461cf759e98deb94019e37f3d9a755c 297839: b08c31dc131b46a3ba0bb9627b47f4676d7b62c1 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/extent_io.c | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 52b94f6df2c2..cd9053d087da 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3083ee2e18b701122a3b841db83448543a87a583 +refs/heads/master: 5df4235ea15bd39f441ef334d8329b3d46b2cc57 diff --git a/trunk/fs/btrfs/extent_io.c b/trunk/fs/btrfs/extent_io.c index 0ce14369920c..4a97d8fd958d 100644 --- a/trunk/fs/btrfs/extent_io.c +++ b/trunk/fs/btrfs/extent_io.c @@ -3683,6 +3683,17 @@ static inline void btrfs_release_extent_buffer(struct extent_buffer *eb) __free_extent_buffer(eb); } +static void mark_extent_buffer_accessed(struct extent_buffer *eb) +{ + unsigned long num_pages, i; + + num_pages = num_extent_pages(eb->start, eb->len); + for (i = 0; i < num_pages; i++) { + struct page *p = extent_buffer_page(eb, i); + mark_page_accessed(p); + } +} + struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, u64 start, unsigned long len) { @@ -3700,7 +3711,7 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, eb = radix_tree_lookup(&tree->buffer, start >> PAGE_CACHE_SHIFT); if (eb && atomic_inc_not_zero(&eb->refs)) { rcu_read_unlock(); - mark_page_accessed(eb->pages[0]); + mark_extent_buffer_accessed(eb); return eb; } rcu_read_unlock(); @@ -3729,6 +3740,7 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, if (atomic_inc_not_zero(&exists->refs)) { spin_unlock(&mapping->private_lock); unlock_page(p); + mark_extent_buffer_accessed(exists); goto free_eb; } @@ -3771,6 +3783,7 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, } spin_unlock(&tree->buffer_lock); radix_tree_preload_end(); + mark_extent_buffer_accessed(exists); goto free_eb; } /* add one reference for the tree */ @@ -3820,7 +3833,7 @@ struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree, eb = radix_tree_lookup(&tree->buffer, start >> PAGE_CACHE_SHIFT); if (eb && atomic_inc_not_zero(&eb->refs)) { rcu_read_unlock(); - mark_page_accessed(eb->pages[0]); + mark_extent_buffer_accessed(eb); return eb; } rcu_read_unlock();