diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-04-09 16:28:12 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:01 -0400 |
commit | ce9adaa5a792c2099a83246265eb4055bc38b6b8 (patch) | |
tree | 3ac03bb73cd3aad0c0b194d387cbb5b136c92fa7 /fs/btrfs/ctree.h | |
parent | 728131d8e40c2a47c59ca91a806299c4708029f9 (diff) |
Btrfs: Do metadata checksums for reads via a workqueue
Before, metadata checksumming was done by the callers of read_tree_block,
which would set EXTENT_CSUM bits in the extent tree to show that a given
range of pages was already checksummed and didn't need to be verified
again.
But, those bits could go away via try_to_releasepage, and the end
result was bogus checksum failures on pages that never left the cache.
The new code validates checksums when the page is read. It is a little
tricky because metadata blocks can span pages and a single read may
end up going via multiple bios.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 4b3b20459f6e..e803c4daad21 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -485,6 +485,10 @@ struct btrfs_fs_info { | |||
485 | struct list_head trans_list; | 485 | struct list_head trans_list; |
486 | struct list_head hashers; | 486 | struct list_head hashers; |
487 | struct list_head dead_roots; | 487 | struct list_head dead_roots; |
488 | struct list_head end_io_work_list; | ||
489 | struct work_struct end_io_work; | ||
490 | spinlock_t end_io_work_lock; | ||
491 | |||
488 | #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18) | 492 | #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18) |
489 | struct work_struct trans_work; | 493 | struct work_struct trans_work; |
490 | #else | 494 | #else |