Btrfs: Fix verify_parent_transid
authorChris Mason <chris.mason@oracle.com>
Wed, 30 Jul 2008 14:29:12 +0000 (10:29 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:05 +0000 (11:04 -0400)
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>
fs/btrfs/disk-io.c
fs/btrfs/extent_io.c

index 27ffa9b..ec1ba8d 100644 (file)
@@ -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;
index e3547a9..964ec16 100644 (file)
@@ -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;
 }