btrfs: push the NODATASUM check into btrfs_lookup_bio_sums
authorJosef Bacik <josef@toxicpanda.com>
Fri, 16 Oct 2020 15:29:14 +0000 (11:29 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 8 Dec 2020 14:53:39 +0000 (15:53 +0100)
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>
fs/btrfs/compression.c
fs/btrfs/file-item.c
fs/btrfs/inode.c

index eeface30facd3e72d4568019a70953a8be81f66b..7e1eb57b923c4c5cc5b70f398f3148b9aa9c1efc 100644 (file)
@@ -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) {
index 8f4f2bd6d9b95cd3b0c34ee2e8362b018dae9480..8083d71d6af62a840ee134cb9f2282073bd34506 100644 (file)
@@ -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;
index 7e8d8169779d248def4688b8f80ad8c10be4e83b..c8cda5df9fb0d31b9c718a60e374b4a7d9a6e183 100644 (file)
@@ -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);