blk-mq: make ->flush_rq fully transparent to drivers
Drivers shouldn't have to care about the block layer setting aside a request to implement the flush state machine. We already override the mq context and tag to make it more transparent, but so far haven't deal with the driver private data in the request. Make sure to override this as well, and while we're at it add a proper helper sitting in blk-mq.c that implements the full impersonation. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
committed by
Jens Axboe
parent
9d74e25737
commit
8727af4b9d
@@ -307,16 +307,8 @@ static bool blk_kick_flush(struct request_queue *q)
|
||||
q->flush_pending_idx ^= 1;
|
||||
|
||||
blk_rq_init(q, q->flush_rq);
|
||||
if (q->mq_ops) {
|
||||
/*
|
||||
* Reuse the tag value from the fist waiting request,
|
||||
* with blk-mq the tag is generated during request
|
||||
* allocation and drivers can rely on it being inside
|
||||
* the range they asked for.
|
||||
*/
|
||||
q->flush_rq->mq_ctx = first_rq->mq_ctx;
|
||||
q->flush_rq->tag = first_rq->tag;
|
||||
}
|
||||
if (q->mq_ops)
|
||||
blk_mq_clone_flush_request(q->flush_rq, first_rq);
|
||||
|
||||
q->flush_rq->cmd_type = REQ_TYPE_FS;
|
||||
q->flush_rq->cmd_flags = WRITE_FLUSH | REQ_FLUSH_SEQ;
|
||||
|
||||
Reference in New Issue
Block a user