Skip to content
Snippets Groups Projects
  1. Feb 26, 2023
    • Jens Axboe's avatar
      io_uring/poll: allow some retries for poll triggering spuriously · c16bda37
      Jens Axboe authored
      If we get woken spuriously when polling and fail the operation with
      -EAGAIN again, then we generally only allow polling again if data
      had been transferred at some point. This is indicated with
      REQ_F_PARTIAL_IO. However, if the spurious poll triggers when the socket
      was originally empty, then we haven't transferred data yet and we will
      fail the poll re-arm. This either punts the socket to io-wq if it's
      blocking, or it fails the request with -EAGAIN if not. Neither condition
      is desirable, as the former will slow things down, while the latter
      will make the application confused.
      
      We want to ensure that a repeated poll trigger doesn't lead to infinite
      work making no progress, that's what the REQ_F_PARTIAL_IO check was
      for. But it doesn't protect against a loop post the first receive, and
      it's unnecessarily strict if we started out with an empty socket.
      
      Add a somewhat random retry count, just to put an upper limit on the
      potential number of retries that will be done. This should be high enough
      that we won't really hit it in practice, unless something needs to be
      aborted anyway.
      
      Cc: stable@vger.kernel.org # v5.10+
      Link: https://github.com/axboe/liburing/issues/364
      
      
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      c16bda37
  2. Jul 25, 2022
Loading