blk-mq: pass bio to blk_mq_sched_get_rq_priv

bio is used in bfq-mq's get_rq_priv, to get the request group. We could
pass directly the group here, but I thought that passing the bio was
more general, giving the possibility to get other pieces of information
if needed.

Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
Paolo Valente 2017-02-07 18:24:43 +01:00 committed by Jens Axboe
parent 5f478e4ea5
commit f1ba82616c
3 changed files with 9 additions and 6 deletions

View File

@ -68,7 +68,9 @@ error:
EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data); EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data);
static void __blk_mq_sched_assign_ioc(struct request_queue *q, static void __blk_mq_sched_assign_ioc(struct request_queue *q,
struct request *rq, struct io_context *ioc) struct request *rq,
struct bio *bio,
struct io_context *ioc)
{ {
struct io_cq *icq; struct io_cq *icq;
@ -83,7 +85,7 @@ static void __blk_mq_sched_assign_ioc(struct request_queue *q,
} }
rq->elv.icq = icq; rq->elv.icq = icq;
if (!blk_mq_sched_get_rq_priv(q, rq)) { if (!blk_mq_sched_get_rq_priv(q, rq, bio)) {
rq->rq_flags |= RQF_ELVPRIV; rq->rq_flags |= RQF_ELVPRIV;
get_io_context(icq->ioc); get_io_context(icq->ioc);
return; return;
@ -99,7 +101,7 @@ static void blk_mq_sched_assign_ioc(struct request_queue *q,
ioc = rq_ioc(bio); ioc = rq_ioc(bio);
if (ioc) if (ioc)
__blk_mq_sched_assign_ioc(q, rq, ioc); __blk_mq_sched_assign_ioc(q, rq, bio, ioc);
} }
struct request *blk_mq_sched_get_request(struct request_queue *q, struct request *blk_mq_sched_get_request(struct request_queue *q,

View File

@ -49,12 +49,13 @@ blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio)
} }
static inline int blk_mq_sched_get_rq_priv(struct request_queue *q, static inline int blk_mq_sched_get_rq_priv(struct request_queue *q,
struct request *rq) struct request *rq,
struct bio *bio)
{ {
struct elevator_queue *e = q->elevator; struct elevator_queue *e = q->elevator;
if (e && e->type->ops.mq.get_rq_priv) if (e && e->type->ops.mq.get_rq_priv)
return e->type->ops.mq.get_rq_priv(q, rq); return e->type->ops.mq.get_rq_priv(q, rq, bio);
return 0; return 0;
} }

View File

@ -109,7 +109,7 @@ struct elevator_mq_ops {
void (*requeue_request)(struct request *); void (*requeue_request)(struct request *);
struct request *(*former_request)(struct request_queue *, struct request *); struct request *(*former_request)(struct request_queue *, struct request *);
struct request *(*next_request)(struct request_queue *, struct request *); struct request *(*next_request)(struct request_queue *, struct request *);
int (*get_rq_priv)(struct request_queue *, struct request *); int (*get_rq_priv)(struct request_queue *, struct request *, struct bio *);
void (*put_rq_priv)(struct request_queue *, struct request *); void (*put_rq_priv)(struct request_queue *, struct request *);
void (*init_icq)(struct io_cq *); void (*init_icq)(struct io_cq *);
void (*exit_icq)(struct io_cq *); void (*exit_icq)(struct io_cq *);