All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] blk-mq: Return invalid cookie if bio was split
@ 2016-09-26 23:00 Keith Busch
  2016-09-27  9:25 ` Ming Lei
  0 siblings, 1 reply; 8+ messages in thread
From: Keith Busch @ 2016-09-26 23:00 UTC (permalink / raw)
  To: linux-block, Jens Axboe; +Cc: Christoph Hellwig

The only user of polling requires its original request be completed in
its entirety before continuing execution. If the bio needs to be split
and chained for any reason, the direct IO path would have waited for just
that split portion to complete, leading to potential data corruption if
the remaining transfer has not yet completed.

This patch has blk-mq return an invalid cookie if a bio requires splitting
so that polling does not occur.

Signed-off-by: Keith Busch <keith.busch@intel.com>
---
 block/blk-mq.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index c207fa9..6385985 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1311,6 +1311,7 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
 	unsigned int request_count = 0;
 	struct blk_plug *plug;
 	struct request *same_queue_rq = NULL;
+	struct bio *orig = bio;
 	blk_qc_t cookie;
 
 	blk_queue_bounce(q, &bio);
@@ -1389,7 +1390,7 @@ run_queue:
 	}
 	blk_mq_put_ctx(data.ctx);
 done:
-	return cookie;
+	return bio == orig ? cookie : BLK_QC_T_NONE;
 }
 
 /*
@@ -1404,6 +1405,7 @@ static blk_qc_t blk_sq_make_request(struct request_queue *q, struct bio *bio)
 	unsigned int request_count = 0;
 	struct blk_map_ctx data;
 	struct request *rq;
+	struct bio *orig = bio;
 	blk_qc_t cookie;
 
 	blk_queue_bounce(q, &bio);
@@ -1467,7 +1469,7 @@ run_queue:
 	}
 
 	blk_mq_put_ctx(data.ctx);
-	return cookie;
+	return bio == orig ? cookie : BLK_QC_T_NONE;
 }
 
 /*
-- 
2.7.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-10-06 16:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-26 23:00 [PATCH] blk-mq: Return invalid cookie if bio was split Keith Busch
2016-09-27  9:25 ` Ming Lei
2016-09-27 18:24   ` Keith Busch
2016-10-03 22:00   ` Keith Busch
2016-10-05  3:19     ` Ming Lei
2016-10-05 16:51       ` Keith Busch
2016-10-06 16:06         ` Ming Lei
2016-10-06 16:39           ` Keith Busch

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.