mm: mark async iocb read as NOWAIT once some data has been copied
authorJens Axboe <axboe@kernel.dk>
Sat, 17 Oct 2020 14:31:29 +0000 (08:31 -0600)
committerJens Axboe <axboe@kernel.dk>
Sat, 17 Oct 2020 19:49:05 +0000 (13:49 -0600)
commit13bd691421bc191a402d2e0d3da5f248d170a632
tree464cd1511166ea7adb526f7f1911755d7833bb7f
parent58852d4d673760cf7c88b9360b3c24a041bec298
mm: mark async iocb read as NOWAIT once some data has been copied

Once we've copied some data for an iocb that is marked with IOCB_WAITQ,
we should no longer attempt to async lock a new page. Instead make sure
we return the copied amount, and let the caller retry, instead of
returning -EIOCBQUEUED for a new page.

This should only be possible with read-ahead disabled on the below
device, and multiple threads racing on the same file. Haven't been able
to reproduce on anything else.

Cc: stable@vger.kernel.org # v5.9
Fixes: 1a0a7853b901 ("mm: support async buffered reads in generic_file_buffered_read()")
Reported-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
mm/filemap.c