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>
This commit is contained in:
@@ -158,9 +158,6 @@ int __btrfs_cow_block(struct btrfs_trans_handle *trans,
|
||||
} else {
|
||||
root_gen = 0;
|
||||
}
|
||||
if (!(buf->flags & EXTENT_CSUM))
|
||||
WARN_ON(1);
|
||||
|
||||
WARN_ON(root->ref_cows && trans->transid !=
|
||||
root->fs_info->running_transaction->transid);
|
||||
WARN_ON(root->ref_cows && trans->transid != root->last_trans);
|
||||
@@ -247,8 +244,6 @@ int btrfs_cow_block(struct btrfs_trans_handle *trans,
|
||||
root->fs_info->generation);
|
||||
WARN_ON(1);
|
||||
}
|
||||
if (!(buf->flags & EXTENT_CSUM))
|
||||
WARN_ON(1);
|
||||
|
||||
header_trans = btrfs_header_generation(buf);
|
||||
spin_lock(&root->fs_info->hash_lock);
|
||||
|
Reference in New Issue
Block a user