diff options
author | Ming Lei <ming.lei@redhat.com> | 2017-11-02 23:24:38 +0800 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2017-11-04 12:40:13 -0600 |
commit | 923218f6166a84688973acdc39094f3bee1e9ad4 (patch) | |
tree | 1013b8c39764532780292633f7e4214c99480aaf /mm/Kconfig.debug | |
parent | 244c65a3ccaa06fd15cc940315606674d3108b2f (diff) | |
download | op-kernel-dev-923218f6166a84688973acdc39094f3bee1e9ad4.zip op-kernel-dev-923218f6166a84688973acdc39094f3bee1e9ad4.tar.gz |
blk-mq: don't allocate driver tag upfront for flush rq
The idea behind it is simple:
1) for none scheduler, driver tag has to be borrowed for flush rq,
otherwise we may run out of tag, and that causes an IO hang. And
get/put driver tag is actually noop for none, so reordering tags
isn't necessary at all.
2) for a real I/O scheduler, we need not allocate a driver tag upfront
for flush rq. It works just fine to follow the same approach as
normal requests: allocate driver tag for each rq just before calling
->queue_rq().
One driver visible change is that the driver tag isn't shared in the
flush request sequence. That won't be a problem, since we always do that
in legacy path.
Then flush rq need not be treated specially wrt. get/put driver tag.
This cleans up the code - for instance, reorder_tags_to_front() can be
removed, and we needn't worry about request ordering in dispatch list
for avoiding I/O deadlock.
Also we have to put the driver tag before requeueing.
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'mm/Kconfig.debug')
0 files changed, 0 insertions, 0 deletions