Commit 334c16d8 authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

btrfs: push the NODATASUM check into btrfs_lookup_bio_sums

When we move to being able to handle NULL csum_roots it'll be cleaner to
just check in btrfs_lookup_bio_sums instead of at all of the caller
locations, so push the NODATASUM check into it as well so it's unified.
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent d70bf748
...@@ -722,11 +722,9 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -722,11 +722,9 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
*/ */
refcount_inc(&cb->pending_bios); refcount_inc(&cb->pending_bios);
if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) { ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1,
ret = btrfs_lookup_bio_sums(inode, comp_bio, sums);
(u64)-1, sums);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
}
nr_sectors = DIV_ROUND_UP(comp_bio->bi_iter.bi_size, nr_sectors = DIV_ROUND_UP(comp_bio->bi_iter.bi_size,
fs_info->sectorsize); fs_info->sectorsize);
...@@ -751,10 +749,8 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -751,10 +749,8 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
ret = btrfs_bio_wq_end_io(fs_info, comp_bio, BTRFS_WQ_ENDIO_DATA); ret = btrfs_bio_wq_end_io(fs_info, comp_bio, BTRFS_WQ_ENDIO_DATA);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1, sums); ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1, sums);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
}
ret = btrfs_map_bio(fs_info, comp_bio, mirror_num); ret = btrfs_map_bio(fs_info, comp_bio, mirror_num);
if (ret) { if (ret) {
......
...@@ -272,6 +272,9 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio, ...@@ -272,6 +272,9 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio,
int count = 0; int count = 0;
u16 csum_size = btrfs_super_csum_size(fs_info->super_copy); u16 csum_size = btrfs_super_csum_size(fs_info->super_copy);
if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)
return BLK_STS_OK;
path = btrfs_alloc_path(); path = btrfs_alloc_path();
if (!path) if (!path)
return BLK_STS_RESOURCE; return BLK_STS_RESOURCE;
......
...@@ -2202,7 +2202,12 @@ blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio, ...@@ -2202,7 +2202,12 @@ blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio,
mirror_num, mirror_num,
bio_flags); bio_flags);
goto out; goto out;
} else if (!skip_sum) { } else {
/*
* Lookup bio sums does extra checks around whether we
* need to csum or not, which is why we ignore skip_sum
* here.
*/
ret = btrfs_lookup_bio_sums(inode, bio, (u64)-1, NULL); ret = btrfs_lookup_bio_sums(inode, bio, (u64)-1, NULL);
if (ret) if (ret)
goto out; goto out;
...@@ -7836,7 +7841,6 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap, ...@@ -7836,7 +7841,6 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
struct bio *dio_bio, loff_t file_offset) struct bio *dio_bio, loff_t file_offset)
{ {
const bool write = (bio_op(dio_bio) == REQ_OP_WRITE); const bool write = (bio_op(dio_bio) == REQ_OP_WRITE);
const bool csum = !(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM);
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
const bool raid56 = (btrfs_data_alloc_profile(fs_info) & const bool raid56 = (btrfs_data_alloc_profile(fs_info) &
BTRFS_BLOCK_GROUP_RAID56_MASK); BTRFS_BLOCK_GROUP_RAID56_MASK);
...@@ -7863,10 +7867,12 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap, ...@@ -7863,10 +7867,12 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
return BLK_QC_T_NONE; return BLK_QC_T_NONE;
} }
if (!write && csum) { if (!write) {
/* /*
* Load the csums up front to reduce csum tree searches and * Load the csums up front to reduce csum tree searches and
* contention when submitting bios. * contention when submitting bios.
*
* If we have csums disabled this will do nothing.
*/ */
status = btrfs_lookup_bio_sums(inode, dio_bio, file_offset, status = btrfs_lookup_bio_sums(inode, dio_bio, file_offset,
dip->csums); dip->csums);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment