btrfs: open code the submit_bio_start helpers
authorChristoph Hellwig <hch@lst.de>
Sat, 21 Jan 2023 06:50:15 +0000 (07:50 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 15 Feb 2023 18:38:52 +0000 (19:38 +0100)
The submit helpers are now trivial and can be called directly.  Note
that btree_csum_one_bio has to be moved up in the file a bit to avoid a
forward declaration.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/btrfs_inode.h
fs/btrfs/disk-io.c
fs/btrfs/disk-io.h
fs/btrfs/inode.c

index 78c7979b8dcac7ffc0c768aba9213790e446bfb0..ba5f023aaf5573ba7aff76e666e4674fec45b24f 100644 (file)
@@ -408,10 +408,6 @@ static inline void btrfs_inode_split_flags(u64 inode_item_flags,
 void btrfs_submit_data_write_bio(struct btrfs_inode *inode, struct bio *bio, int mirror_num);
 void btrfs_submit_data_read_bio(struct btrfs_inode *inode, struct bio *bio,
                        int mirror_num, enum btrfs_compression_type compress_type);
-blk_status_t btrfs_submit_bio_start(struct btrfs_inode *inode, struct bio *bio);
-blk_status_t btrfs_submit_bio_start_direct_io(struct btrfs_inode *inode,
-                                             struct bio *bio,
-                                             u64 dio_file_offset);
 int btrfs_check_sector_csum(struct btrfs_fs_info *fs_info, struct page *page,
                            u32 pgoff, u8 *csum, const u8 * const csum_expected);
 bool btrfs_data_csum_ok(struct btrfs_bio *bbio, struct btrfs_device *dev,
index cb8e495f981bc2cee9dbce6e9d1dcc28712d9a67..764ee9338637e61efdeefc5cdfdf79b6e70b355f 100644 (file)
@@ -52,6 +52,7 @@
 #include "relocation.h"
 #include "scrub.h"
 #include "super.h"
+#include "file-item.h"
 
 #define BTRFS_SUPER_FLAG_SUPP  (BTRFS_HEADER_FLAG_WRITTEN |\
                                 BTRFS_HEADER_FLAG_RELOC |\
@@ -455,6 +456,24 @@ static int csum_dirty_buffer(struct btrfs_fs_info *fs_info, struct bio_vec *bvec
        return csum_one_extent_buffer(eb);
 }
 
+static blk_status_t btree_csum_one_bio(struct bio *bio)
+{
+       struct bio_vec *bvec;
+       struct btrfs_root *root;
+       struct bvec_iter_all iter_all;
+       int ret = 0;
+
+       ASSERT(!bio_flagged(bio, BIO_CLONED));
+       bio_for_each_segment_all(bvec, bio, iter_all) {
+               root = BTRFS_I(bvec->bv_page->mapping->host)->root;
+               ret = csum_dirty_buffer(root->fs_info, bvec);
+               if (ret)
+                       break;
+       }
+
+       return errno_to_blk_status(ret);
+}
+
 static int check_tree_block_fsid(struct extent_buffer *eb)
 {
        struct btrfs_fs_info *fs_info = eb->fs_info;
@@ -708,14 +727,14 @@ static void run_one_async_start(struct btrfs_work *work)
        async = container_of(work, struct  async_submit_bio, work);
        switch (async->submit_cmd) {
        case WQ_SUBMIT_METADATA:
-               ret = btree_submit_bio_start(async->bio);
+               ret = btree_csum_one_bio(async->bio);
                break;
        case WQ_SUBMIT_DATA:
-               ret = btrfs_submit_bio_start(async->inode, async->bio);
+               ret = btrfs_csum_one_bio(async->inode, async->bio, (u64)-1, false);
                break;
        case WQ_SUBMIT_DATA_DIO:
-               ret = btrfs_submit_bio_start_direct_io(async->inode,
-                               async->bio, async->dio_file_offset);
+               ret = btrfs_csum_one_bio(async->inode, async->bio,
+                                        async->dio_file_offset, false);
                break;
        default:
                /* Can't happen so return something that would prevent the IO. */
@@ -800,33 +819,6 @@ bool btrfs_wq_submit_bio(struct btrfs_inode *inode, struct bio *bio, int mirror_
        return true;
 }
 
-static blk_status_t btree_csum_one_bio(struct bio *bio)
-{
-       struct bio_vec *bvec;
-       struct btrfs_root *root;
-       int ret = 0;
-       struct bvec_iter_all iter_all;
-
-       ASSERT(!bio_flagged(bio, BIO_CLONED));
-       bio_for_each_segment_all(bvec, bio, iter_all) {
-               root = BTRFS_I(bvec->bv_page->mapping->host)->root;
-               ret = csum_dirty_buffer(root->fs_info, bvec);
-               if (ret)
-                       break;
-       }
-
-       return errno_to_blk_status(ret);
-}
-
-blk_status_t btree_submit_bio_start(struct bio *bio)
-{
-       /*
-        * when we're called for a write, we're already in the async
-        * submission context.  Just jump into btrfs_submit_bio.
-        */
-       return btree_csum_one_bio(bio);
-}
-
 static bool should_async_write(struct btrfs_fs_info *fs_info,
                             struct btrfs_inode *bi)
 {
index f2f295eb6103da3dd00e1d30c086a910c41747a5..5898beb648484a1beecbdfc1c4f3872da54fbbb4 100644 (file)
@@ -122,7 +122,6 @@ enum btrfs_wq_submit_cmd {
 
 bool btrfs_wq_submit_bio(struct btrfs_inode *inode, struct bio *bio, int mirror_num,
                         u64 dio_file_offset, enum btrfs_wq_submit_cmd cmd);
-blk_status_t btree_submit_bio_start(struct bio *bio);
 int btrfs_alloc_log_tree_node(struct btrfs_trans_handle *trans,
                              struct btrfs_root *root);
 int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
index 8e1d61b731ed6073248c315b39e80558815c957f..cdb0f8cb0d4f22f77a4f653f6faef5374c6d2896 100644 (file)
@@ -2532,19 +2532,6 @@ void btrfs_clear_delalloc_extent(struct btrfs_inode *inode,
        }
 }
 
-/*
- * in order to insert checksums into the metadata in large chunks,
- * we wait until bio submission time.   All the pages in the bio are
- * checksummed and sums are attached onto the ordered extent record.
- *
- * At IO completion time the cums attached on the ordered extent record
- * are inserted into the btree
- */
-blk_status_t btrfs_submit_bio_start(struct btrfs_inode *inode, struct bio *bio)
-{
-       return btrfs_csum_one_bio(inode, bio, (u64)-1, false);
-}
-
 /*
  * Split an extent_map at [start, start + len]
  *
@@ -7835,13 +7822,6 @@ static void btrfs_dio_private_put(struct btrfs_dio_private *dip)
        bio_endio(&dip->bio);
 }
 
-blk_status_t btrfs_submit_bio_start_direct_io(struct btrfs_inode *inode,
-                                             struct bio *bio,
-                                             u64 dio_file_offset)
-{
-       return btrfs_csum_one_bio(inode, bio, dio_file_offset, false);
-}
-
 static void btrfs_end_dio_bio(struct btrfs_bio *bbio)
 {
        struct btrfs_dio_private *dip = bbio->private;