• Jens Axboe's avatar
    io_uring: fix up O_NONBLOCK handling for sockets · 491381ce
    Jens Axboe authored
    We've got two issues with the non-regular file handling for non-blocking
    IO:
    
    1) We don't want to re-do a short read in full for a non-regular file,
       as we can't just read the data again.
    2) For non-regular files that don't support non-blocking IO attempts,
       we need to punt to async context even if the file is opened as
       non-blocking. Otherwise the caller always gets -EAGAIN.
    
    Add two new request flags to handle these cases. One is just a cache
    of the inode S_ISREG() status, the other tells io_uring that we always
    need to punt this request to async context, even if REQ_F_NOWAIT is set.
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarHrvoje Zeba <zeba.hrvoje@gmail.com>
    Tested-by: default avatarHrvoje Zeba <zeba.hrvoje@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    491381ce
io_uring.c 94.2 KB