On 9/25/20 3:23 PM, Jens Axboe wrote: > On 9/25/20 3:18 AM, Hao_Xu wrote: >> Hi Jens, >> I'm doing tests about this feature: [PATCHSET RFC 0/11] Add support for >> async buffered reads >> But currently with fio testing, I found the code doesn't go to the >> essential places in the function generic_file_buffered_read: >> >> if (iocb->ki_flags & IOCB_WAITQ) { >> if (written) { >> put_page(page); >> goto out; >> } >> error = wait_on_page_locked_async(page, >> iocb->ki_waitq); >> } else { >> >> and >> >> page_not_up_to_date: >> /* Get exclusive access to the page ... */ >> if (iocb->ki_flags & IOCB_WAITQ) >> error = lock_page_async(page, iocb->ki_waitq); >> else > > Can you try with this added? Looks like a regression got introduced... Oops, needs 'ret' cleared too. This should be better! diff --git a/fs/io_uring.c b/fs/io_uring.c index ad828fa19af4..11b8e428300d 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3172,10 +3172,8 @@ static int io_read(struct io_kiocb *req, bool force_nonblock, goto done; /* some cases will consume bytes even on error returns */ iov_iter_revert(iter, iov_count - iov_iter_count(iter)); - ret = io_setup_async_rw(req, iovec, inline_vecs, iter, false); - if (ret) - goto out_free; - return -EAGAIN; + ret = 0; + goto copy_iov; } else if (ret < 0) { /* make sure -ERESTARTSYS -> -EINTR is done */ goto done; -- Jens Axboe