Commit deb6216f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Sterba
Browse files

btrfs: open code the submit_bio_start helpers



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: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 295fe46f
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -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,
+23 −31
Original line number Diff line number Diff line
@@ -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)
{
+0 −1
Original line number Diff line number Diff line
@@ -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,
+0 −20
Original line number Diff line number Diff line
@@ -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;