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: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
d70bf7484f
Коммит
334c16d82c
|
@ -722,11 +722,9 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
|
|||
*/
|
||||
refcount_inc(&cb->pending_bios);
|
||||
|
||||
if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
|
||||
ret = btrfs_lookup_bio_sums(inode, comp_bio,
|
||||
(u64)-1, sums);
|
||||
BUG_ON(ret); /* -ENOMEM */
|
||||
}
|
||||
ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1,
|
||||
sums);
|
||||
BUG_ON(ret); /* -ENOMEM */
|
||||
|
||||
nr_sectors = DIV_ROUND_UP(comp_bio->bi_iter.bi_size,
|
||||
fs_info->sectorsize);
|
||||
|
@ -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);
|
||||
BUG_ON(ret); /* -ENOMEM */
|
||||
|
||||
if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
|
||||
ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1, sums);
|
||||
BUG_ON(ret); /* -ENOMEM */
|
||||
}
|
||||
ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1, sums);
|
||||
BUG_ON(ret); /* -ENOMEM */
|
||||
|
||||
ret = btrfs_map_bio(fs_info, comp_bio, mirror_num);
|
||||
if (ret) {
|
||||
|
|
|
@ -272,6 +272,9 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio,
|
|||
int count = 0;
|
||||
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();
|
||||
if (!path)
|
||||
return BLK_STS_RESOURCE;
|
||||
|
|
|
@ -2202,7 +2202,12 @@ blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio,
|
|||
mirror_num,
|
||||
bio_flags);
|
||||
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);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
@ -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)
|
||||
{
|
||||
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);
|
||||
const bool raid56 = (btrfs_data_alloc_profile(fs_info) &
|
||||
BTRFS_BLOCK_GROUP_RAID56_MASK);
|
||||
|
@ -7863,10 +7867,12 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
|
|||
return BLK_QC_T_NONE;
|
||||
}
|
||||
|
||||
if (!write && csum) {
|
||||
if (!write) {
|
||||
/*
|
||||
* Load the csums up front to reduce csum tree searches and
|
||||
* contention when submitting bios.
|
||||
*
|
||||
* If we have csums disabled this will do nothing.
|
||||
*/
|
||||
status = btrfs_lookup_bio_sums(inode, dio_bio, file_offset,
|
||||
dip->csums);
|
||||
|
|
Загрузка…
Ссылка в новой задаче