diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2015-10-21 22:34:20 +0200 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2015-11-01 00:06:02 +0100 |
commit | dbba42d8a9ebddcc1c1412e8457f79f3cb6ef6e7 (patch) | |
tree | aa185bdeae4a2b11d875cb2a21dac8c23608e1bf /drivers/md/dm.c | |
parent | dm: convert ffs to __ffs (diff) | |
download | linux-dbba42d8a9ebddcc1c1412e8457f79f3cb6ef6e7.tar.xz linux-dbba42d8a9ebddcc1c1412e8457f79f3cb6ef6e7.zip |
dm: eliminate unused "bioset" process for each bio-based DM device
Commit 54efd50bfd873e2dbf784e0b21a8027ba4299a3e ("block: make
generic_make_request handle arbitrarily sized bios") makes it possible
for block devices to process large bios. In doing so that commit
allocates a new queue->bio_split bioset for each block device, this
bioset is used for allocating bios when the driver needs to split large
bios.
Each bioset allocates a workqueue process, thus the above commit
increases the number of processes allocated per block device.
DM doesn't need the queue->bio_split bioset, thus we can deallocate it.
This reduces the number of allocated processes per bio-based DM device
from 3 to 2. Also remove the call to blk_queue_split(), it is not
needed because DM does its own splitting.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 95558432c080..64b50b71400f 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1763,8 +1763,6 @@ static void dm_make_request(struct request_queue *q, struct bio *bio) map = dm_get_live_table(md, &srcu_idx); - blk_queue_split(q, &bio, q->bio_split); - generic_start_io_acct(rw, bio_sectors(bio), &dm_disk(md)->part0); /* if we're suspended, we have to queue this io for later */ @@ -2792,6 +2790,12 @@ int dm_setup_md_queue(struct mapped_device *md) case DM_TYPE_BIO_BASED: dm_init_old_md_queue(md); blk_queue_make_request(md->queue, dm_make_request); + /* + * DM handles splitting bios as needed. Free the bio_split bioset + * since it won't be used (saves 1 process per bio-based DM device). + */ + bioset_free(md->queue->bio_split); + md->queue->bio_split = NULL; break; } |