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:
parent
5f478e4ea5
commit
f1ba82616c
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 *);
|
||||||
|
|
Loading…
Reference in New Issue