On Tue 29-08-17 16:13:19, Christoph Hellwig wrote: > From: Milosz Tanski <[email protected]> > > 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 <[email protected]> > Reviewed-by: Christoph Hellwig <[email protected]> > Reviewed-by: Jeff Moyer <[email protected]> > Acked-by: Sage Weil <[email protected]>
This looks good to me now. You can add: Reviewed-by: Jan Kara <[email protected]> Honza > --- > mm/filemap.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/mm/filemap.c b/mm/filemap.c > index 4bcfa74ad802..eed394fd331c 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); > @@ -1950,6 +1952,11 @@ static ssize_t generic_file_buffered_read(struct kiocb > *iocb, > index, last_index - index); > } > if (!PageUptodate(page)) { > + if (iocb->ki_flags & IOCB_NOWAIT) { > + put_page(page); > + goto would_block; > + } > + > /* > * See comment in do_read_cache_page on why > * wait_on_page_locked is used to avoid unnecessarily > @@ -2131,6 +2138,8 @@ static ssize_t generic_file_buffered_read(struct kiocb > *iocb, > goto readpage; > } > > +would_block: > + error = -EAGAIN; > out: > ra->prev_pos = prev_index; > ra->prev_pos <<= PAGE_SHIFT; > -- > 2.11.0 > -- Jan Kara <[email protected]> SUSE Labs, CR
