mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Dongsu Park <dongsu.park@profitbricks.com>
To: linux-kernel@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>, Kent Overstreet <kmo@daterainc.com>,
	Ming Lin <mlin@minggr.net>,
	Dongsu Park <dongsu.park@profitbricks.com>,
	Chris Mason <clm@fb.com>, Josef Bacik <jbacik@fb.com>,
	linux-btrfs@vger.kernel.org
Subject: [RFC PATCH 05/17] btrfs: remove bio splitting and merge_bvec_fn() calls
Date: Mon, 22 Dec 2014 12:48:32 +0100	[thread overview]
Message-ID: <e4b7b017eaa81784889ebb2a4e6a7d4366adf13a.1419241597.git.dongsu.park@profitbricks.com> (raw)
In-Reply-To: <bb0051ceb5805896089ded26c0f7f06758b25105.1419241597.git.dongsu.park@profitbricks.com>
In-Reply-To: <cover.1419241597.git.dongsu.park@profitbricks.com>

From: Kent Overstreet <kmo@daterainc.com>

Btrfs has been doing bio splitting from btrfs_map_bio(), by checking
device limits as well as calling ->merge_bvec_fn() etc. That is not
necessary any more, because generic_make_request() is now able to
handle arbitrarily sized bios. So clean up unnecessary code paths.

Signed-off-by: Kent Overstreet <kmo@daterainc.com>
[dpark: add more description in commit message]
Signed-off-by: Dongsu Park <dongsu.park@profitbricks.com>
Cc: Chris Mason <clm@fb.com>
Cc: Josef Bacik <jbacik@fb.com>
Cc: linux-btrfs@vger.kernel.org
---
 fs/btrfs/volumes.c | 73 ------------------------------------------------------
 1 file changed, 73 deletions(-)

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 50c5a87..c627bf8 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -5691,34 +5691,6 @@ static noinline void btrfs_schedule_bio(struct btrfs_root *root,
 				 &device->work);
 }
 
-static int bio_size_ok(struct block_device *bdev, struct bio *bio,
-		       sector_t sector)
-{
-	struct bio_vec *prev;
-	struct request_queue *q = bdev_get_queue(bdev);
-	unsigned int max_sectors = queue_max_sectors(q);
-	struct bvec_merge_data bvm = {
-		.bi_bdev = bdev,
-		.bi_sector = sector,
-		.bi_rw = bio->bi_rw,
-	};
-
-	if (WARN_ON(bio->bi_vcnt == 0))
-		return 1;
-
-	prev = &bio->bi_io_vec[bio->bi_vcnt - 1];
-	if (bio_sectors(bio) > max_sectors)
-		return 0;
-
-	if (!q->merge_bvec_fn)
-		return 1;
-
-	bvm.bi_size = bio->bi_iter.bi_size - prev->bv_len;
-	if (q->merge_bvec_fn(q, &bvm, prev) < prev->bv_len)
-		return 0;
-	return 1;
-}
-
 static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
 			      struct bio *bio, u64 physical, int dev_nr,
 			      int rw, int async)
@@ -5752,38 +5724,6 @@ static void submit_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
 		btrfsic_submit_bio(rw, bio);
 }
 
-static int breakup_stripe_bio(struct btrfs_root *root, struct btrfs_bio *bbio,
-			      struct bio *first_bio, struct btrfs_device *dev,
-			      int dev_nr, int rw, int async)
-{
-	struct bio_vec *bvec = first_bio->bi_io_vec;
-	struct bio *bio;
-	int nr_vecs = bio_get_nr_vecs(dev->bdev);
-	u64 physical = bbio->stripes[dev_nr].physical;
-
-again:
-	bio = btrfs_bio_alloc(dev->bdev, physical >> 9, nr_vecs, GFP_NOFS);
-	if (!bio)
-		return -ENOMEM;
-
-	while (bvec <= (first_bio->bi_io_vec + first_bio->bi_vcnt - 1)) {
-		if (bio_add_page(bio, bvec->bv_page, bvec->bv_len,
-				 bvec->bv_offset) < bvec->bv_len) {
-			u64 len = bio->bi_iter.bi_size;
-
-			atomic_inc(&bbio->stripes_pending);
-			submit_stripe_bio(root, bbio, bio, physical, dev_nr,
-					  rw, async);
-			physical += len;
-			goto again;
-		}
-		bvec++;
-	}
-
-	submit_stripe_bio(root, bbio, bio, physical, dev_nr, rw, async);
-	return 0;
-}
-
 static void bbio_error(struct btrfs_bio *bbio, struct bio *bio, u64 logical)
 {
 	atomic_inc(&bbio->error);
@@ -5862,19 +5802,6 @@ int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio,
 			continue;
 		}
 
-		/*
-		 * Check and see if we're ok with this bio based on it's size
-		 * and offset with the given device.
-		 */
-		if (!bio_size_ok(dev->bdev, first_bio,
-				 bbio->stripes[dev_nr].physical >> 9)) {
-			ret = breakup_stripe_bio(root, bbio, first_bio, dev,
-						 dev_nr, rw, async_submit);
-			BUG_ON(ret);
-			dev_nr++;
-			continue;
-		}
-
 		if (dev_nr < total_devs - 1) {
 			bio = btrfs_bio_clone(first_bio, GFP_NOFS);
 			BUG_ON(!bio); /* -ENOMEM */
-- 
2.1.0


  reply	other threads:[~2014-12-22 11:49 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-22 11:48 [RFC PATCH 00/17] simplify block layer based on immutable biovecs Dongsu Park
2014-12-22 11:48 ` [RFC PATCH 01/17] block: make generic_make_request handle arbitrarily sized bios Dongsu Park
2014-12-22 11:48   ` [RFC PATCH 02/17] block: simplify bio_add_page() Dongsu Park
2014-12-22 11:48     ` [RFC PATCH 03/17] block: simplify issueing discard, write_same, zeroout Dongsu Park
2014-12-22 11:48       ` [RFC PATCH 04/17] bcache: clean up hacks around bio_split_pool Dongsu Park
2014-12-22 11:48         ` Dongsu Park [this message]
2014-12-22 11:48           ` [RFC PATCH 06/17] btrfs: make use of immutable biovecs Dongsu Park
2014-12-22 11:48             ` [RFC PATCH 07/17] block: replace sg_iovec with iov_iter Dongsu Park
2014-12-22 11:48               ` [RFC PATCH 08/17] block: refactor __bio_copy_iov() Dongsu Park
2014-12-22 11:48                 ` [RFC PATCH 09/17] block: refactor iov_count_pages() from bio_{copy,map}_user_iov() Dongsu Park
2014-12-22 11:48                   ` [RFC PATCH 10/17] block: refactor bio_get_user_pages() from __bio_map_user_iov() Dongsu Park
2014-12-22 11:48                     ` [RFC PATCH 11/17] block: allow __blk_queue_bounce() to handle bios larger than BIO_MAX_PAGES Dongsu Park
2014-12-22 11:48                       ` [RFC PATCH 12/17] md/raid10: make sync_request_write() call bio_copy_data() Dongsu Park
2014-12-22 11:48                         ` [RFC PATCH 13/17] md/raid5: get rid of bio_fits_rdev() Dongsu Park
2014-12-22 11:48                           ` [RFC PATCH 14/17] block: kill merge_bvec_fn() completely Dongsu Park
2014-12-22 11:48                             ` [RFC PATCH 15/17] fs: use helper bio_add_page() instead of open coding on bi_io_vec Dongsu Park
2014-12-22 11:48                               ` [RFC PATCH 16/17] fs: convert buffer head etc. to use immutable biovecs API Dongsu Park
2014-12-22 11:48                                 ` [RFC PATCH 17/17] Documentation: update notes in biovecs about arbitrarily sized bios Dongsu Park
2014-12-23 10:52                                   ` Christoph Hellwig
2014-12-23 12:34                                     ` Dongsu Park
2014-12-23 10:51                                 ` [RFC PATCH 16/17] fs: convert buffer head etc. to use immutable biovecs API Christoph Hellwig
2014-12-23 12:33                                   ` Dongsu Park
2014-12-22 15:22                               ` [RFC PATCH 15/17] fs: use helper bio_add_page() instead of open coding on bi_io_vec Dave Kleikamp
2014-12-23 10:48                         ` [RFC PATCH 12/17] md/raid10: make sync_request_write() call bio_copy_data() Christoph Hellwig
2014-12-23 12:31                           ` Dongsu Park
2014-12-23 10:45                 ` [RFC PATCH 08/17] block: refactor __bio_copy_iov() Christoph Hellwig
2014-12-23 12:24                   ` Dongsu Park
2014-12-23 10:44               ` [RFC PATCH 07/17] block: replace sg_iovec with iov_iter Christoph Hellwig
2014-12-23 12:18                 ` Dongsu Park
2014-12-27 15:03                   ` Christoph Hellwig
2014-12-23 10:35             ` [RFC PATCH 06/17] btrfs: make use of immutable biovecs Christoph Hellwig
2014-12-23 12:09               ` Dongsu Park
     [not found]           ` <e4b7b017eaa81784889ebb2a4e6a7d4366adf13a.1419241597.git.dongsu.park@profit bricks.com>
2014-12-23 14:44             ` [RFC PATCH 05/17] btrfs: remove bio splitting and merge_bvec_fn() calls Chris Mason
2014-12-23 10:23       ` [RFC PATCH 03/17] block: simplify issueing discard, write_same, zeroout Christoph Hellwig
2014-12-23 10:22     ` [RFC PATCH 02/17] block: simplify bio_add_page() Christoph Hellwig
2014-12-23 11:46       ` Dongsu Park
2014-12-23 10:16   ` [RFC PATCH 01/17] block: make generic_make_request handle arbitrarily sized bios Christoph Hellwig
2014-12-23 11:41     ` Dongsu Park
2014-12-27 15:02       ` Christoph Hellwig
2014-12-23 19:14   ` Geoff Levand
2014-12-24 10:37     ` Dongsu Park
2014-12-25  6:09   ` Ming Lei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e4b7b017eaa81784889ebb2a4e6a7d4366adf13a.1419241597.git.dongsu.park@profitbricks.com \
    --to=dongsu.park@profitbricks.com \
    --cc=axboe@kernel.dk \
    --cc=clm@fb.com \
    --cc=jbacik@fb.com \
    --cc=kmo@daterainc.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlin@minggr.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®