]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dm: remove request-based logic from make_request_fn wrapper
authorMike Snitzer <snitzer@redhat.com>
Mon, 23 Feb 2015 22:56:37 +0000 (17:56 -0500)
committerMike Snitzer <snitzer@redhat.com>
Tue, 31 Mar 2015 16:03:49 +0000 (12:03 -0400)
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).

Also, remove the export for blk_queue_bio() now that DM no longer calls
it directly.  Doing so required a forward declaration in blk-core.c.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
block/blk-core.c
drivers/md/dm.c
include/linux/blkdev.h

index fd154b94447a25788f48d5e8cc04bc803d1efdb8..1638a4f5110e9ea459d63586c9dab455ec5ae798 100644 (file)
@@ -732,6 +732,8 @@ blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id)
 }
 EXPORT_SYMBOL(blk_init_queue_node);
 
+static void blk_queue_bio(struct request_queue *q, struct bio *bio);
+
 struct request_queue *
 blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
                         spinlock_t *lock)
@@ -1576,7 +1578,7 @@ void init_request_from_bio(struct request *req, struct bio *bio)
        blk_rq_bio_prep(req->q, req, bio);
 }
 
-void blk_queue_bio(struct request_queue *q, struct bio *bio)
+static void blk_queue_bio(struct request_queue *q, struct bio *bio)
 {
        const bool sync = !!(bio->bi_rw & REQ_SYNC);
        struct blk_plug *plug;
@@ -1684,7 +1686,6 @@ out_unlock:
                spin_unlock_irq(q->queue_lock);
        }
 }
-EXPORT_SYMBOL_GPL(blk_queue_bio);      /* for device mapper only */
 
 /*
  * If bio->bi_dev is a partition, remap the location
index cc8aed2e3f889e2aebd178da5cb35ca53566a099..43e0d1a85a6096f4ac6436c05b7058fa7dea02bd 100644 (file)
@@ -1693,7 +1693,7 @@ out:
  * The request function that just remaps the bio built up by
  * 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);
        struct mapped_device *md = q->queuedata;
@@ -1725,16 +1725,6 @@ int dm_request_based(struct mapped_device *md)
        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)
 {
        int r;
@@ -2100,9 +2090,8 @@ static void dm_init_md_queue(struct mapped_device *md)
        md->queue->queuedata = md;
        md->queue->backing_dev_info.congested_fn = dm_any_congested;
        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_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)
                return 0;
 
-       if (q->make_request_fn == dm_request) {
+       if (q->make_request_fn == dm_make_request) {
                dev_md = q->queuedata;
                if (test_bit(DMF_MERGE_IS_OPTIONAL, &dev_md->flags))
                        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)
 {
-       if (dm_md_type_request_based(md) && !dm_init_request_based_queue(md)) {
-               DMWARN("Cannot initialize queue for request-based mapped device");
-               return -EINVAL;
+       if (dm_md_type_request_based(md)) {
+               if (!dm_init_request_based_queue(md)) {
+                       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;
index 7f9a516f24dec57182f51cff3580db3904208a84..5d93a6645e88676a7d90a1ac55b5d5d6792da667 100644 (file)
@@ -821,8 +821,6 @@ extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
                         struct scsi_ioctl_command __user *);
 
-extern void blk_queue_bio(struct request_queue *q, struct bio *bio);
-
 /*
  * A queue has just exitted congestion.  Note this in the global counter of
  * congested queues, and wake up anyone who was waiting for requests to be