mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-01 10:43:43 +00:00
block: make sure FSEQ_DATA request has the same rq_disk as the original
rq->rq_disk and bio->bi_bdev->bd_disk may differ if a request has passed through remapping drivers. FSEQ_DATA request incorrectly followed bio->bi_bdev->bd_disk ending up being issued w/ mismatching rq_disk. Make it follow orig_rq->rq_disk. Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> Tested-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
This commit is contained in:
parent
47f70d5a6c
commit
09d60c701b
@ -111,6 +111,13 @@ static struct request *queue_next_fseq(struct request_queue *q)
|
||||
break;
|
||||
case QUEUE_FSEQ_DATA:
|
||||
init_request_from_bio(rq, orig_rq->bio);
|
||||
/*
|
||||
* orig_rq->rq_disk may be different from
|
||||
* bio->bi_bdev->bd_disk if orig_rq got here through
|
||||
* remapping drivers. Make sure rq->rq_disk points
|
||||
* to the same one as orig_rq.
|
||||
*/
|
||||
rq->rq_disk = orig_rq->rq_disk;
|
||||
rq->cmd_flags &= ~(REQ_FLUSH | REQ_FUA);
|
||||
rq->cmd_flags |= orig_rq->cmd_flags & (REQ_FLUSH | REQ_FUA);
|
||||
rq->end_io = flush_data_end_io;
|
||||
|
Loading…
Reference in New Issue
Block a user