Skip to content

Commit

Permalink
blk-mq: let blk_mq_tag_to_rq() take blk_mq_tags as the main parameter
Browse files Browse the repository at this point in the history
We currently pass in the hardware queue, and get the tags from there.
But from scsi-mq, with a shared tag space, it's a lot more convenient
to pass in the blk_mq_tags instead as the hardware queue isn't always
directly available. So instead of having to re-map to a given
hardware queue from rq->mq_ctx, just pass in the tags structure.

Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
axboe committed Jun 4, 2014
1 parent f899fed commit 0e62f51
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
19 changes: 12 additions & 7 deletions block/blk-mq.c
Original file line number Diff line number Diff line change
Expand Up @@ -529,15 +529,20 @@ void blk_mq_kick_requeue_list(struct request_queue *q)
}
EXPORT_SYMBOL(blk_mq_kick_requeue_list);

struct request *blk_mq_tag_to_rq(struct blk_mq_hw_ctx *hctx, unsigned int tag)
static inline bool is_flush_request(struct request *rq, unsigned int tag)
{
struct request_queue *q = hctx->queue;
return ((rq->cmd_flags & REQ_FLUSH_SEQ) &&
rq->q->flush_rq->tag == tag);
}

if ((q->flush_rq->cmd_flags & REQ_FLUSH_SEQ) &&
q->flush_rq->tag == tag)
return q->flush_rq;
struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag)
{
struct request *rq = tags->rqs[tag];

if (!is_flush_request(rq, tag))
return rq;

return hctx->tags->rqs[tag];
return rq->q->flush_rq;
}
EXPORT_SYMBOL(blk_mq_tag_to_rq);

Expand Down Expand Up @@ -566,7 +571,7 @@ static void blk_mq_timeout_check(void *__data, unsigned long *free_tags)
if (tag >= hctx->tags->nr_tags)
break;

rq = blk_mq_tag_to_rq(hctx, tag++);
rq = blk_mq_tag_to_rq(hctx->tags, tag++);
if (rq->q != hctx->queue)
continue;
if (!test_bit(REQ_ATOM_STARTED, &rq->atomic_flags))
Expand Down
4 changes: 3 additions & 1 deletion drivers/block/mtip32xx/mtip32xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,9 @@ static void mtip_put_int_command(struct driver_data *dd, struct mtip_cmd *cmd)
static struct request *mtip_rq_from_tag(struct driver_data *dd,
unsigned int tag)
{
return blk_mq_tag_to_rq(dd->queue->queue_hw_ctx[0], tag);
struct blk_mq_hw_ctx *hctx = dd->queue->queue_hw_ctx[0];

return blk_mq_tag_to_rq(hctx->tags, tag);
}

static struct mtip_cmd *mtip_cmd_from_tag(struct driver_data *dd,
Expand Down
2 changes: 1 addition & 1 deletion include/linux/blk-mq.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ void blk_mq_free_request(struct request *rq);
bool blk_mq_can_queue(struct blk_mq_hw_ctx *);
struct request *blk_mq_alloc_request(struct request_queue *q, int rw,
gfp_t gfp, bool reserved);
struct request *blk_mq_tag_to_rq(struct blk_mq_hw_ctx *hctx, unsigned int tag);
struct request *blk_mq_tag_to_rq(struct blk_mq_tags *tags, unsigned int tag);

struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *, const int ctx_index);
struct blk_mq_hw_ctx *blk_mq_alloc_single_hw_queue(struct blk_mq_tag_set *, unsigned int, int);
Expand Down

0 comments on commit 0e62f51

Please sign in to comment.