On Tue 29-08-17 16:13:19, Christoph Hellwig wrote:
> From: Milosz Tanski <mil...@adfin.com>
> 
> 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 <mil...@adfin.com>
> Reviewed-by: Christoph Hellwig <h...@lst.de>
> Reviewed-by: Jeff Moyer <jmo...@redhat.com>
> Acked-by: Sage Weil <s...@redhat.com>

This looks good to me now. You can add:

Reviewed-by: Jan Kara <j...@suse.cz>

                                                                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 <j...@suse.com>
SUSE Labs, CR

Reply via email to