summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-07-30 10:29:12 -0400
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:05 -0400
commit33958dc6d38fb4ca7e62273855fcb2db7e616263 (patch)
tree98c97e1827e537286499f6a755833a2946cc4f47 /fs
parentf321e4910398cf7922265d269fb17fd26f312571 (diff)
downloadlinux-3.10-33958dc6d38fb4ca7e62273855fcb2db7e616263.tar.gz
linux-3.10-33958dc6d38fb4ca7e62273855fcb2db7e616263.tar.bz2
linux-3.10-33958dc6d38fb4ca7e62273855fcb2db7e616263.zip
Btrfs: Fix verify_parent_transid
It was incorrectly clearing the up to date flag on the buffer even when the buffer properly verified. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/disk-io.c2
-rw-r--r--fs/btrfs/extent_io.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 27ffa9b7ddc..ec1ba8ddb35 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -235,8 +235,8 @@ static int verify_parent_transid(struct extent_io_tree *io_tree,
(unsigned long long)parent_transid,
(unsigned long long)btrfs_header_generation(eb));
ret = 1;
-out:
clear_extent_buffer_uptodate(io_tree, eb);
+out:
unlock_extent(io_tree, eb->start, eb->start + eb->len - 1,
GFP_NOFS);
return ret;
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index e3547a992d5..964ec1622d6 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2647,6 +2647,8 @@ static inline struct page *extent_buffer_page(struct extent_buffer *eb,
return eb->first_page;
i += eb->start >> PAGE_CACHE_SHIFT;
mapping = eb->first_page->mapping;
+ if (!mapping)
+ return NULL;
read_lock_irq(&mapping->tree_lock);
p = radix_tree_lookup(&mapping->page_tree, i);
read_unlock_irq(&mapping->tree_lock);
@@ -2908,7 +2910,8 @@ int clear_extent_buffer_uptodate(struct extent_io_tree *tree,
GFP_NOFS);
for (i = 0; i < num_pages; i++) {
page = extent_buffer_page(eb, i);
- ClearPageUptodate(page);
+ if (page)
+ ClearPageUptodate(page);
}
return 0;
}