On Fri, Nov 12, 2021 at 09:21:40AM +0100, Christoph Hellwig wrote: > On Fri, Nov 12, 2021 at 04:11:37PM +0800, Ming Lei wrote: > > @@ -2564,13 +2564,15 @@ static inline struct request *blk_mq_get_request(struct request_queue *q, > > if (blk_mq_attempt_bio_merge(q, bio, nsegs, > > same_queue_rq)) > > return NULL; > > + if (bio->bi_opf != rq->cmd_flags) > > + goto fallback; > > I think this deserves a comment, as this means a read prealloc OK. > can only be used for reads, and no fua can be set if the preallocating > I/O didn't use fua, etc. > > What are the pitfalls of just chanigng cmd_flags? Then we need to check cmd_flags carefully, such as hctx->type has to be same, flush & passthrough flags has to be same, that said all ->cmd_flags used for allocating rqs have to be same with the following bio->bi_opf. In usual cases, I guess all IOs submitted from same plug batch should be same type. If not, we can switch to change cmd_flags. Thanks, Ming