Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbba42d8 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Mike Snitzer
Browse files

dm: eliminate unused "bioset" process for each bio-based DM device



Commit 54efd50b ("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: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent a3d939ae
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -1763,8 +1763,6 @@ static void dm_make_request(struct request_queue *q, struct bio *bio)


	map = dm_get_live_table(md, &srcu_idx);
	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);
	generic_start_io_acct(rw, bio_sectors(bio), &dm_disk(md)->part0);


	/* if we're suspended, we have to queue this io for later */
	/* 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:
	case DM_TYPE_BIO_BASED:
		dm_init_old_md_queue(md);
		dm_init_old_md_queue(md);
		blk_queue_make_request(md->queue, dm_make_request);
		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;
		break;
	}
	}