mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
dm: remove request-based logic from make_request_fn wrapper
The old dm_request() method used for q->make_request_fn had a branch for request-based DM support but it isn't needed given that dm_init_request_based_queue() sets it to the standard blk_queue_bio() anyway. Cleanup dm_init_md_queue() to be DM device-type agnostic and have dm_setup_md_queue() properly finish queue setup based on DM device-type (bio-based vs request-based). A followup block patch can be made to remove the export for blk_queue_bio() now that DM no longer calls it directly. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
d56b9b28a4
commit
ff36ab3458
@ -1693,7 +1693,7 @@ out:
|
|||||||
* The request function that just remaps the bio built up by
|
* The request function that just remaps the bio built up by
|
||||||
* dm_merge_bvec.
|
* dm_merge_bvec.
|
||||||
*/
|
*/
|
||||||
static void _dm_request(struct request_queue *q, struct bio *bio)
|
static void dm_make_request(struct request_queue *q, struct bio *bio)
|
||||||
{
|
{
|
||||||
int rw = bio_data_dir(bio);
|
int rw = bio_data_dir(bio);
|
||||||
struct mapped_device *md = q->queuedata;
|
struct mapped_device *md = q->queuedata;
|
||||||
@ -1725,16 +1725,6 @@ int dm_request_based(struct mapped_device *md)
|
|||||||
return blk_queue_stackable(md->queue);
|
return blk_queue_stackable(md->queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dm_request(struct request_queue *q, struct bio *bio)
|
|
||||||
{
|
|
||||||
struct mapped_device *md = q->queuedata;
|
|
||||||
|
|
||||||
if (dm_request_based(md))
|
|
||||||
blk_queue_bio(q, bio);
|
|
||||||
else
|
|
||||||
_dm_request(q, bio);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dm_dispatch_clone_request(struct request *clone, struct request *rq)
|
static void dm_dispatch_clone_request(struct request *clone, struct request *rq)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
@ -2100,9 +2090,8 @@ static void dm_init_md_queue(struct mapped_device *md)
|
|||||||
md->queue->queuedata = md;
|
md->queue->queuedata = md;
|
||||||
md->queue->backing_dev_info.congested_fn = dm_any_congested;
|
md->queue->backing_dev_info.congested_fn = dm_any_congested;
|
||||||
md->queue->backing_dev_info.congested_data = md;
|
md->queue->backing_dev_info.congested_data = md;
|
||||||
blk_queue_make_request(md->queue, dm_request);
|
|
||||||
blk_queue_bounce_limit(md->queue, BLK_BOUNCE_ANY);
|
blk_queue_bounce_limit(md->queue, BLK_BOUNCE_ANY);
|
||||||
blk_queue_merge_bvec(md->queue, dm_merge_bvec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2335,7 +2324,7 @@ int dm_queue_merge_is_compulsory(struct request_queue *q)
|
|||||||
if (!q->merge_bvec_fn)
|
if (!q->merge_bvec_fn)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (q->make_request_fn == dm_request) {
|
if (q->make_request_fn == dm_make_request) {
|
||||||
dev_md = q->queuedata;
|
dev_md = q->queuedata;
|
||||||
if (test_bit(DMF_MERGE_IS_OPTIONAL, &dev_md->flags))
|
if (test_bit(DMF_MERGE_IS_OPTIONAL, &dev_md->flags))
|
||||||
return 0;
|
return 0;
|
||||||
@ -2545,9 +2534,15 @@ static int dm_init_request_based_queue(struct mapped_device *md)
|
|||||||
*/
|
*/
|
||||||
int dm_setup_md_queue(struct mapped_device *md)
|
int dm_setup_md_queue(struct mapped_device *md)
|
||||||
{
|
{
|
||||||
if (dm_md_type_request_based(md) && !dm_init_request_based_queue(md)) {
|
if (dm_md_type_request_based(md)) {
|
||||||
DMWARN("Cannot initialize queue for request-based mapped device");
|
if (!dm_init_request_based_queue(md)) {
|
||||||
return -EINVAL;
|
DMWARN("Cannot initialize queue for request-based mapped device");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* bio-based specific initialization */
|
||||||
|
blk_queue_make_request(md->queue, dm_make_request);
|
||||||
|
blk_queue_merge_bvec(md->queue, dm_merge_bvec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user