diff options
author | Jens Axboe <axboe@kernel.dk> | 2021-11-04 11:54:47 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-11-04 23:21:01 -0600 |
commit | 10c47870155b5d9a8597eff3345d244e2fe1847f (patch) | |
tree | dfb0da10e659f98d73fff720ae8d062733726f66 | |
parent | 900e080752025f0016128f07c9ed4c50eba3654b (diff) | |
download | linux-10c47870155b5d9a8597eff3345d244e2fe1847f.tar.gz linux-10c47870155b5d9a8597eff3345d244e2fe1847f.tar.bz2 linux-10c47870155b5d9a8597eff3345d244e2fe1847f.zip |
block: ensure cached plug request matches the current queue
If we're driving multiple devices, we could have pre-populated the cache
for a different device. Ensure that the empty request matches the current
queue.
Fixes: 47c122e35d7e ("block: pre-allocate requests if plug is started and is a batch")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | block/blk-mq.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c index 5fe40c85a308..bbe1fb2dd58d 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2540,7 +2540,7 @@ static inline struct request *blk_mq_get_request(struct request_queue *q, struct request *rq; rq = rq_list_peek(&plug->cached_rq); - if (rq) { + if (rq && rq->q == q) { if (unlikely(!submit_bio_checks(bio))) return NULL; if (blk_attempt_bio_merge(q, bio, nsegs, same_queue_rq)) |