On Wed, Sep 13, 2017 at 09:32:30PM +0800, Ming Lei wrote: > The behind idea is simple: > > 1) for none scheduler, driver tag has to be borrowed for flush > rq, otherwise we may run out of tag, and IO hang is caused. > get/put driver tag is actually a nop, so reorder tags isn't > necessary at all. > > 2) for real I/O scheduler, we needn't to allocate driver tag > beforehand for flush rq, and it works just fine to follow the > way for normal requests: allocate driver tag for each rq just > before calling .queue_rq(). > > Then flush rq isn't treated specially wrt. get/put driver tag, > codes get cleanup much, such as, reorder_tags_to_front() is > removed, needn't to worry about request order in dispatch list > any more. > > One visible change to driver is that flush rq's tag may not be > same with the data rq in flush sequence, that won't be a > problem, since we always do that in legacy path. Please ignore this patch, since looks there is one issue. -- Ming