io_uring: don't count rqs failed after current one
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 14 Apr 2020 21:39:50 +0000 (00:39 +0300)
committerJens Axboe <axboe@kernel.dk>
Wed, 15 Apr 2020 01:16:59 +0000 (19:16 -0600)
commit31af27c7cc9f675d93a135dca99e6413f9096f1d
treefb117c1957897b8eff97aec74593fb86c810e69f
parentb55ce732004989c85bf9d858c03e6d477cf9023b
io_uring: don't count rqs failed after current one

When checking for draining with __req_need_defer(), it tries to match
how many requests were sent before a current one with number of already
completed. Dropped SQEs are included in req->sequence, and they won't
ever appear in CQ. To compensate for that, __req_need_defer() substracts
ctx->cached_sq_dropped.
However, what it should really use is number of SQEs dropped __before__
the current one. In other words, any submitted request shouldn't
shouldn't affect dequeueing from the drain queue of previously submitted
ones.

Instead of saving proper ctx->cached_sq_dropped in each request,
substract from req->sequence it at initialisation, so it includes number
of properly submitted requests.

note: it also changes behaviour of timeouts, but
1. it's already diverge from the description because of using SQ
2. the description is ambiguous regarding dropped SQEs

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c