|
@@ -223,7 +223,7 @@ static void flush_end_io(struct request *flush_rq, int error)
|
|
bool queued = false;
|
|
bool queued = false;
|
|
struct request *rq, *n;
|
|
struct request *rq, *n;
|
|
unsigned long flags = 0;
|
|
unsigned long flags = 0;
|
|
- struct blk_flush_queue *fq = blk_get_flush_queue(q);
|
|
|
|
|
|
+ struct blk_flush_queue *fq = blk_get_flush_queue(q, flush_rq->mq_ctx);
|
|
|
|
|
|
if (q->mq_ops) {
|
|
if (q->mq_ops) {
|
|
spin_lock_irqsave(&fq->mq_flush_lock, flags);
|
|
spin_lock_irqsave(&fq->mq_flush_lock, flags);
|
|
@@ -319,7 +319,7 @@ static bool blk_kick_flush(struct request_queue *q, struct blk_flush_queue *fq)
|
|
static void flush_data_end_io(struct request *rq, int error)
|
|
static void flush_data_end_io(struct request *rq, int error)
|
|
{
|
|
{
|
|
struct request_queue *q = rq->q;
|
|
struct request_queue *q = rq->q;
|
|
- struct blk_flush_queue *fq = blk_get_flush_queue(q);
|
|
|
|
|
|
+ struct blk_flush_queue *fq = blk_get_flush_queue(q, NULL);
|
|
|
|
|
|
/*
|
|
/*
|
|
* After populating an empty queue, kick it to avoid stall. Read
|
|
* After populating an empty queue, kick it to avoid stall. Read
|
|
@@ -333,11 +333,10 @@ static void mq_flush_data_end_io(struct request *rq, int error)
|
|
{
|
|
{
|
|
struct request_queue *q = rq->q;
|
|
struct request_queue *q = rq->q;
|
|
struct blk_mq_hw_ctx *hctx;
|
|
struct blk_mq_hw_ctx *hctx;
|
|
- struct blk_mq_ctx *ctx;
|
|
|
|
|
|
+ struct blk_mq_ctx *ctx = rq->mq_ctx;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
- struct blk_flush_queue *fq = blk_get_flush_queue(q);
|
|
|
|
|
|
+ struct blk_flush_queue *fq = blk_get_flush_queue(q, ctx);
|
|
|
|
|
|
- ctx = rq->mq_ctx;
|
|
|
|
hctx = q->mq_ops->map_queue(q, ctx->cpu);
|
|
hctx = q->mq_ops->map_queue(q, ctx->cpu);
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -367,7 +366,7 @@ void blk_insert_flush(struct request *rq)
|
|
struct request_queue *q = rq->q;
|
|
struct request_queue *q = rq->q;
|
|
unsigned int fflags = q->flush_flags; /* may change, cache */
|
|
unsigned int fflags = q->flush_flags; /* may change, cache */
|
|
unsigned int policy = blk_flush_policy(fflags, rq);
|
|
unsigned int policy = blk_flush_policy(fflags, rq);
|
|
- struct blk_flush_queue *fq = blk_get_flush_queue(q);
|
|
|
|
|
|
+ struct blk_flush_queue *fq = blk_get_flush_queue(q, rq->mq_ctx);
|
|
|
|
|
|
/*
|
|
/*
|
|
* @policy now records what operations need to be done. Adjust
|
|
* @policy now records what operations need to be done. Adjust
|