]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
bsg: update check for rq based driver for blk-mq
authorJens Axboe <axboe@fb.com>
Wed, 16 Apr 2014 16:57:18 +0000 (10:57 -0600)
committerJens Axboe <axboe@fb.com>
Wed, 16 Apr 2014 20:15:46 +0000 (14:15 -0600)
bsg currently checks ->request_fn to check whether a queue can
handle struct request. But with blk-mq, we don't have a request_fn
yet are request based. Add a queue_is_rq_based() helper and use
that in bsg, I'm guessing this is not the last place we need to
update for this. Besides, it better explains what is being
checked.

Signed-off-by: Jens Axboe <axboe@fb.com>
block/bsg.c
include/linux/blkdev.h

index 420a5a9f1b23f72963dc928b2dd009be443e3337..e5214c1480962e5d53c0f0ced44af571051d9654 100644 (file)
@@ -1008,7 +1008,7 @@ int bsg_register_queue(struct request_queue *q, struct device *parent,
        /*
         * we need a proper transport to send commands, not a stacked device
         */
-       if (!q->request_fn)
+       if (!queue_is_rq_based(q))
                return 0;
 
        bcd = &q->bsg_dev;
index 20b26d4e53a2ffa1f9717531c752e62cf1833b9f..74ee55fefcf0a4810f5fb984b2247aba9e019ae2 100644 (file)
@@ -612,6 +612,15 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q)
 
 #define rq_data_dir(rq)                (((rq)->cmd_flags & 1) != 0)
 
+/*
+ * Driver can handle struct request, if it either has an old style
+ * request_fn defined, or is blk-mq based.
+ */
+static inline bool queue_is_rq_based(struct request_queue *q)
+{
+       return q->request_fn || q->mq_ops;
+}
+
 static inline unsigned int blk_queue_cluster(struct request_queue *q)
 {
        return q->limits.cluster;