From: Christoph Hellwig <hch@lst.de>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, hch@lst.de,
kent.overstreet@gmail.com
Subject: Re: [PATCH v2 11/18] mm/filemap: Convert filemap_update_page to return an errno
Date: Fri, 6 Nov 2020 09:14:20 +0100 [thread overview]
Message-ID: <20201106081420.GF31585@lst.de> (raw)
In-Reply-To: <20201104204219.23810-12-willy@infradead.org>
On Wed, Nov 04, 2020 at 08:42:12PM +0000, Matthew Wilcox (Oracle) wrote:
> Use AOP_TRUNCATED_PAGE to indicate that no error occurred, but the
> page we looked up is no longer valid.
>
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Reviewed-by: Kent Overstreet <kent.overstreet@gmail.com>
> ---
> mm/filemap.c | 42 +++++++++++++++++++-----------------------
> 1 file changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/mm/filemap.c b/mm/filemap.c
> index 25945fefdd39..93c054f51677 100644
> --- a/mm/filemap.c
> +++ b/mm/filemap.c
> @@ -2231,24 +2231,21 @@ static int filemap_read_page(struct file *file, struct address_space *mapping,
> return error;
> }
>
> +static int filemap_update_page(struct kiocb *iocb,
> + struct address_space *mapping, struct iov_iter *iter,
> + struct page *page, loff_t pos, loff_t count)
> {
> struct inode *inode = mapping->host;
> int error;
>
> if (iocb->ki_flags & IOCB_WAITQ) {
> error = lock_page_async(page, iocb->ki_waitq);
> + if (error)
> + goto error;
> } else {
> if (!trylock_page(page)) {
> put_and_wait_on_page_locked(page, TASK_KILLABLE);
> + return AOP_TRUNCATED_PAGE;
> }
> }
>
> @@ -2267,25 +2264,24 @@ static struct page *filemap_update_page(struct kiocb *iocb, struct file *filp,
> goto readpage;
> uptodate:
> unlock_page(page);
> + return 0;
>
> readpage:
> if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT | IOCB_WAITQ)) {
> unlock_page(page);
> + error = -EAGAIN;
> + } else {
> + error = filemap_read_page(iocb->ki_filp, mapping, page);
> + if (!error)
> + return 0;
> }
> +error:
> put_page(page);
> + return error;
> truncated:
> unlock_page(page);
> put_page(page);
> + return AOP_TRUNCATED_PAGE;
We could still consolidate the page unlocking by having another label.
Or even better move the put_page into the caller like I did in my
series, which would conceputally fit in pretty nicely here:
> + err = filemap_update_page(iocb, mapping, iter, page,
> pg_pos, pg_count);
> + if (err)
> pvec->nr--;
But otherwise this looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
next prev parent reply other threads:[~2020-11-06 8:14 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-04 20:42 [PATCH v2 00/18] Refactor generic_file_buffered_read Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 01/18] mm/filemap: Rename generic_file_buffered_read subfunctions Matthew Wilcox (Oracle)
2020-11-06 8:07 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 02/18] mm/filemap: Remove dynamically allocated array from filemap_read Matthew Wilcox (Oracle)
2020-11-04 21:30 ` Kent Overstreet
2020-11-04 21:43 ` Amy Parker
2020-11-05 0:13 ` Matthew Wilcox
2020-11-06 8:08 ` Christoph Hellwig
2020-11-06 12:30 ` [PATCH 1/4] pagevec: Allow pagevecs to be different sizes Matthew Wilcox (Oracle)
2020-11-06 12:30 ` [PATCH 2/4] pagevec: Increase the size of LRU pagevecs Matthew Wilcox (Oracle)
2020-11-06 12:30 ` [PATCH 3/4] pagevec: Add dynamically allocated pagevecs Matthew Wilcox (Oracle)
2020-11-06 12:30 ` [PATCH 4/4] mm/filemap: Use a dynamically allocated pagevec in filemap_read Matthew Wilcox (Oracle)
2020-11-07 17:08 ` [PATCH 1/4] pagevec: Allow pagevecs to be different sizes Kent Overstreet
2020-11-07 17:20 ` Matthew Wilcox
2020-11-05 4:52 ` [PATCH v2 02/18] mm/filemap: Remove dynamically allocated array from filemap_read Matthew Wilcox
2020-11-06 8:07 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 03/18] mm/filemap: Convert filemap_get_pages to take a pagevec Matthew Wilcox (Oracle)
2020-11-06 8:08 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 04/18] mm/filemap: Use THPs in generic_file_buffered_read Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 05/18] mm/filemap: Pass a sleep state to put_and_wait_on_page_locked Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 06/18] mm/filemap: Support readpage splitting a page Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 07/18] mm/filemap: Inline __wait_on_page_locked_async into caller Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 08/18] mm/filemap: Don't call ->readpage if IOCB_WAITQ is set Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 09/18] mm/filemap: Change filemap_read_page calling conventions Matthew Wilcox (Oracle)
2020-11-06 8:11 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 10/18] mm/filemap: Change filemap_create_page " Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 11/18] mm/filemap: Convert filemap_update_page to return an errno Matthew Wilcox (Oracle)
2020-11-06 8:14 ` Christoph Hellwig [this message]
2020-11-06 8:37 ` Christoph Hellwig
2020-11-09 13:29 ` Matthew Wilcox
2020-11-04 20:42 ` [PATCH v2 12/18] mm/filemap: Move the iocb checks into filemap_update_page Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 13/18] mm/filemap: Add filemap_range_uptodate Matthew Wilcox (Oracle)
2020-11-06 8:16 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 14/18] mm/filemap: Split filemap_readahead out of filemap_get_pages Matthew Wilcox (Oracle)
2020-11-06 8:19 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 15/18] mm/filemap: Restructure filemap_get_pages Matthew Wilcox (Oracle)
2020-11-06 8:21 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 16/18] mm/filemap: Don't relock the page after calling readpage Matthew Wilcox (Oracle)
2020-11-06 8:21 ` Christoph Hellwig
2020-11-04 20:42 ` [PATCH v2 17/18] mm/filemap: Rename generic_file_buffered_read to filemap_read Matthew Wilcox (Oracle)
2020-11-04 20:42 ` [PATCH v2 18/18] mm/filemap: Simplify generic_file_read_iter Matthew Wilcox (Oracle)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201106081420.GF31585@lst.de \
--to=hch@lst.de \
--cc=kent.overstreet@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.