blk-mq: move blk_mq_put_driver_tag*() into blk-mq.h
We need this helper to put the driver tag for flush rq, since we will not share tag in the flush request sequence in the following patch in case that I/O scheduler is applied. Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
a6a252e649
commit
244c65a3cc
|
@ -996,38 +996,6 @@ done:
|
||||||
return rq->tag != -1;
|
return rq->tag != -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __blk_mq_put_driver_tag(struct blk_mq_hw_ctx *hctx,
|
|
||||||
struct request *rq)
|
|
||||||
{
|
|
||||||
blk_mq_put_tag(hctx, hctx->tags, rq->mq_ctx, rq->tag);
|
|
||||||
rq->tag = -1;
|
|
||||||
|
|
||||||
if (rq->rq_flags & RQF_MQ_INFLIGHT) {
|
|
||||||
rq->rq_flags &= ~RQF_MQ_INFLIGHT;
|
|
||||||
atomic_dec(&hctx->nr_active);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void blk_mq_put_driver_tag_hctx(struct blk_mq_hw_ctx *hctx,
|
|
||||||
struct request *rq)
|
|
||||||
{
|
|
||||||
if (rq->tag == -1 || rq->internal_tag == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
__blk_mq_put_driver_tag(hctx, rq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void blk_mq_put_driver_tag(struct request *rq)
|
|
||||||
{
|
|
||||||
struct blk_mq_hw_ctx *hctx;
|
|
||||||
|
|
||||||
if (rq->tag == -1 || rq->internal_tag == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
hctx = blk_mq_map_queue(rq->q, rq->mq_ctx->cpu);
|
|
||||||
__blk_mq_put_driver_tag(hctx, rq);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we fail getting a driver tag because all the driver tags are already
|
* If we fail getting a driver tag because all the driver tags are already
|
||||||
* assigned and on the dispatch list, BUT the first entry does not have a
|
* assigned and on the dispatch list, BUT the first entry does not have a
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define INT_BLK_MQ_H
|
#define INT_BLK_MQ_H
|
||||||
|
|
||||||
#include "blk-stat.h"
|
#include "blk-stat.h"
|
||||||
|
#include "blk-mq-tag.h"
|
||||||
|
|
||||||
struct blk_mq_tag_set;
|
struct blk_mq_tag_set;
|
||||||
|
|
||||||
|
@ -156,4 +157,36 @@ static inline bool blk_mq_get_dispatch_budget(struct blk_mq_hw_ctx *hctx)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __blk_mq_put_driver_tag(struct blk_mq_hw_ctx *hctx,
|
||||||
|
struct request *rq)
|
||||||
|
{
|
||||||
|
blk_mq_put_tag(hctx, hctx->tags, rq->mq_ctx, rq->tag);
|
||||||
|
rq->tag = -1;
|
||||||
|
|
||||||
|
if (rq->rq_flags & RQF_MQ_INFLIGHT) {
|
||||||
|
rq->rq_flags &= ~RQF_MQ_INFLIGHT;
|
||||||
|
atomic_dec(&hctx->nr_active);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void blk_mq_put_driver_tag_hctx(struct blk_mq_hw_ctx *hctx,
|
||||||
|
struct request *rq)
|
||||||
|
{
|
||||||
|
if (rq->tag == -1 || rq->internal_tag == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
__blk_mq_put_driver_tag(hctx, rq);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void blk_mq_put_driver_tag(struct request *rq)
|
||||||
|
{
|
||||||
|
struct blk_mq_hw_ctx *hctx;
|
||||||
|
|
||||||
|
if (rq->tag == -1 || rq->internal_tag == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hctx = blk_mq_map_queue(rq->q, rq->mq_ctx->cpu);
|
||||||
|
__blk_mq_put_driver_tag(hctx, rq);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue