diff options
| author | Bart Van Assche <bvanassche@acm.org> | 2019-04-04 10:08:43 -0700 | 
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2019-04-05 09:40:46 -0600 | 
| commit | fd9c40f64c514bdc585a21e2e33fa5f83ca8811b (patch) | |
| tree | 6325afffd310da5e086f86dc27c4a79d375a5207 /block/blk-core.c | |
| parent | f0d1762554014ce0ae347b9f0d088f2c157c8c72 (diff) | |
block: Revert v5.0 blk_mq_request_issue_directly() changes
blk_mq_try_issue_directly() can return BLK_STS*_RESOURCE for requests that
have been queued. If that happens when blk_mq_try_issue_directly() is called
by the dm-mpath driver then dm-mpath will try to resubmit a request that is
already queued and a kernel crash follows. Since it is nontrivial to fix
blk_mq_request_issue_directly(), revert the blk_mq_request_issue_directly()
changes that went into kernel v5.0.
This patch reverts the following commits:
* d6a51a97c0b2 ("blk-mq: replace and kill blk_mq_request_issue_directly") # v5.0.
* 5b7a6f128aad ("blk-mq: issue directly with bypass 'false' in blk_mq_sched_insert_requests") # v5.0.
* 7f556a44e61d ("blk-mq: refactor the code of issue request directly") # v5.0.
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Jianchao Wang <jianchao.w.wang@oracle.com>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Cc: James Smart <james.smart@broadcom.com>
Cc: Dongli Zhang <dongli.zhang@oracle.com>
Cc: Laurence Oberman <loberman@redhat.com>
Cc: <stable@vger.kernel.org>
Reported-by: Laurence Oberman <loberman@redhat.com>
Tested-by: Laurence Oberman <loberman@redhat.com>
Fixes: 7f556a44e61d ("blk-mq: refactor the code of issue request directly") # v5.0.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-core.c')
| -rw-r--r-- | block/blk-core.c | 4 | 
1 files changed, 1 insertions, 3 deletions
| diff --git a/block/blk-core.c b/block/blk-core.c index 4673ebe42255..a55389ba8779 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -1245,8 +1245,6 @@ static int blk_cloned_rq_check_limits(struct request_queue *q,   */  blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *rq)  { -	blk_qc_t unused; -  	if (blk_cloned_rq_check_limits(q, rq))  		return BLK_STS_IOERR; @@ -1262,7 +1260,7 @@ blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *  	 * bypass a potential scheduler on the bottom device for  	 * insert.  	 */ -	return blk_mq_try_issue_directly(rq->mq_hctx, rq, &unused, true, true); +	return blk_mq_request_issue_directly(rq, true);  }  EXPORT_SYMBOL_GPL(blk_insert_cloned_request); | 
