On Fri, Sep 11, 2020 at 11:29:58AM +0800, Jeffle Xu wrote: > Splitted bios of one source bio can be enqueued into different CPU since > the submit_bio() routine can be preempted or fall asleep. However this > behaviour can't work well with iopolling. Do you have user visible problem wrt. io polling? If yes, can you provide more details? > > Currently block iopolling only polls the hardwar queue of the input bio. > If one bio is splitted to several bios, one (bio 1) of which is enqueued > into CPU A, while the others enqueued into CPU B, then the polling of bio 1 > will cotinuously poll the hardware queue of CPU A, though the other > splitted bios may be in other hardware queues. If it is guaranteed that the returned cookie is from bio 1, poll is supposed to work as expected, since bio 1 is the chained head of these bios, and the whole fs bio can be thought as done when bio1 .end_bio is called. > > The iopolling logic has no idea if the input bio is splitted bio, or if > it has other splitted siblings. Thus ensure that all splitted bios are > enqueued into one CPU at the beginning. Yeah, that is why io poll can't work on DM. > > This is only one RFC patch and it is not complete since dm/mq-scheduler > have not been considered yet. Please let me know if it is on the correct > direction or not. > > Besides I have one question on the split routine. Why the split routine > is implemented in a recursive style? Why we can't split the bio one time > and then submit the *already splitted* bios one by one? Forward progress has to be provided on new splitted bio allocation which is from same bio_set. Thanks, Ming