On Wed, Oct 30, 2019 at 08:21:26AM +0800, Ming Lei wrote: > > + if ((*bio)->bi_vcnt == 1 && > > + (*bio)->bi_io_vec[0].bv_len <= PAGE_SIZE) { > > + *nr_segs = 1; > > + return; > > + } > > split = blk_bio_segment_split(q, *bio, &q->bio_split, nr_segs); > > break; > > } > > This bio(*bio) may be a fast-cloned bio from somewhere(DM, MD, ...), so the above > check can't work sometime. Please explain how it doesn't work. In the worse case it will give us a false negastive, that is we don't take the fast path when in theory we could, but then again fast cloneѕ bios will have so much overhead that it should not matter.