Btrfs: Add some extra debugging around file data checksum failures
authorChris Mason <chris.mason@oracle.com>
Tue, 29 Jan 2008 14:10:27 +0000 (09:10 -0500)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:03:59 +0000 (11:03 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/file-item.c
fs/btrfs/inode.c

index 614176e5285182938a05917e0b55ea8d7e20d55e..3ebbc058d082f135d202f223b0ce23b6d0aeec46 100644 (file)
@@ -261,6 +261,10 @@ csum:
 found:
        csum_result = btrfs_csum_data(root, data, csum_result, len);
        btrfs_csum_final(csum_result, (char *)&csum_result);
+       if (csum_result == 0) {
+               printk("csum result is 0 for inode %lu offset %Lu\n", inode->i_ino, offset);
+       }
+
        write_extent_buffer(leaf, &csum_result, (unsigned long)item,
                            BTRFS_CRC32_SIZE);
        btrfs_mark_buffer_dirty(path->nodes[0]);
index 026bc9c4c90d37a0b6a766cf48e56102c432e8ea..484551274100f6828fcd910d860b0c2af7cb9f8d 100644 (file)
@@ -318,6 +318,7 @@ int btrfs_readpage_io_hook(struct page *page, u64 start, u64 end)
                if (ret == -ENOENT || ret == -EFBIG)
                        ret = 0;
                csum = 0;
+               printk("no csum found for inode %lu start %Lu\n", inode->i_ino, start);
                goto out;
        }
        read_extent_buffer(path->nodes[0], &csum, (unsigned long)item,
@@ -336,7 +337,7 @@ int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
        struct inode *inode = page->mapping->host;
        struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
        char *kaddr;
-       u64 private;
+       u64 private = ~(u32)0;
        int ret;
        struct btrfs_root *root = BTRFS_I(inode)->root;
        u32 csum = ~(u32)0;
@@ -362,8 +363,9 @@ int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
        return 0;
 
 zeroit:
-       printk("btrfs csum failed ino %lu off %llu\n",
-              page->mapping->host->i_ino, (unsigned long long)start);
+       printk("btrfs csum failed ino %lu off %llu csum %u private %Lu\n",
+              page->mapping->host->i_ino, (unsigned long long)start, csum,
+              private);
        memset(kaddr + offset, 1, end - start + 1);
        flush_dcache_page(page);
        kunmap_atomic(kaddr, KM_IRQ0);