On Tue 29-08-17 16:13:19, Christoph Hellwig wrote: > From: Milosz Tanski <milosz@xxxxxxxxx> > > 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 <milosz@xxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Jeff Moyer <jmoyer@xxxxxxxxxx> > Acked-by: Sage Weil <sage@xxxxxxxxxx> This looks good to me now. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> 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 <jack@xxxxxxxx> SUSE Labs, CR