Re: [PATCH 2/4] fs: support IOCB_NOWAIT in generic_file_buffered_read
From: Jan Kara <jack@suse.cz>
Date: 2017-08-24 14:31:43
Also in:
linux-fsdevel
On Tue 22-08-17 18:17:10, Christoph Hellwig wrote:
quoted hunk ↗ jump to hunk
From: Milosz Tanski <redacted> Allow generic_file_buffered_read to bail out early instead of waiting for the page lock or reading a page if IOCB_NOWAIT is specified. Signed-off-by: Milosz Tanski <redacted> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jeff Moyer <redacted> Acked-by: Sage Weil <redacted> --- mm/filemap.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)diff --git a/mm/filemap.c b/mm/filemap.c index 4bcfa74ad802..9f60255fb7bb 100644 --- a/mm/filemap.c +++ b/mm/filemap.c@@ -1937,6 +1937,8 @@ static ssize_t generic_file_buffered_read(struct kiocb *iocb, page = find_get_page(mapping, index); if (!page) { + if (iocb->ki_flags & IOCB_NOWAIT) + goto would_block; page_cache_sync_readahead(mapping, ra, filp, index, last_index - index);
Hum, we have:
if (!PageUptodate(page)) {
/*
* See comment in do_read_cache_page on why
* wait_on_page_locked is used to avoid
* unnecessarily
* serialisations and why it's safe.
*/
error = wait_on_page_locked_killable(page);
if (unlikely(error))
goto readpage_error;
if (PageUptodate(page))
goto page_ok;
And wait_on_page_locked_killable() above does not seem to be handled in
your patch. I would just check IOCB_NOWAIT in !PageUptodate(page) branch
above and bail - which also removes the need for the two checks below...
Honza
--
Jan Kara [off-list ref]
SUSE Labs, CR