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
next prev parent 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®