aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-io.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2018-11-15 21:42:07 -0500
committerJens Axboe <axboe@kernel.dk>2018-11-15 21:47:35 -0500
commit9334ae5e6f9972110c2be136178ca2591c072b62 (patch)
tree7ea04e9483dbd948ab13a24af717b3e24ed29819 /drivers/ide/ide-io.c
parentdb29eb059cdc571f9d75cec4a41b9884b3b8286a (diff)
ide: clear ide_req()->special for non-passthrough requests
The initial patch cleared this for all requests, which is wrong since internal uses can't have this cleared as that's what they are using to pass data. The fix moved the initialization to the mq_ops->initialize_rq_fn(), but that's only a partial fix since it only catches uses from blk_get_request(), not requests coming from the file system. Keep the non-fs initialization, and add the IDE entry clear IFF RQF_DONTPREP isn't set and it's a passthrough request. Fixes: d16a67667c61 ("ide: don't clear special on ide_queue_rq() entry") Fixes: 22ce0a7ccf23 ("ide: don't use req->special") Reported-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/ide/ide-io.c')
-rw-r--r--drivers/ide/ide-io.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index c0dd0fad16a3..8445b484ae69 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -463,6 +463,11 @@ blk_status_t ide_queue_rq(struct blk_mq_hw_ctx *hctx,
463 struct request *rq = bd->rq; 463 struct request *rq = bd->rq;
464 ide_startstop_t startstop; 464 ide_startstop_t startstop;
465 465
466 if (!blk_rq_is_passthrough(rq) && !(rq->rq_flags & RQF_DONTPREP)) {
467 rq->rq_flags |= RQF_DONTPREP;
468 ide_req(rq)->special = NULL;
469 }
470
466 /* HLD do_request() callback might sleep, make sure it's okay */ 471 /* HLD do_request() callback might sleep, make sure it's okay */
467 might_sleep(); 472 might_sleep();
468 473