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... diff --git a/fs/io_uring.c b/fs/io_uring.c index 40670ad4446c..99b842ac2dc0 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3339,10 +3339,7 @@ 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; + goto copy_iov; } else if (ret < 0) { /* make sure -ERESTARTSYS -> -EINTR is done */ goto done; -- Jens Axboe