From: David Howells <dhowells@redhat.com> To: jlayton@kernel.org, willy@infradead.org Cc: linux-afs@lists.infradead.org, dhowells@redhat.com, linux-afs@lists.infradead.org, ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] afs: Handle len being extending over page end in write_begin/write_end Date: Mon, 14 Jun 2021 14:20:17 +0100 [thread overview] Message-ID: <162367681795.460125.11729955608839747375.stgit@warthog.procyon.org.uk> (raw) With transparent huge pages, in the future, write_begin() and write_end() may be passed a length parameter that, in combination with the offset into the page, exceeds the length of that page. This allows grab_cache_page_write_begin() to better choose the size of THP to allocate. Fix afs's functions to handle this by trimming the length as needed after the page has been allocated. Fixes: e1b1240c1ff5 ("netfs: Add write_begin helper") Reported-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: David Howells <dhowells@redhat.com> cc: linux-afs@lists.infradead.org --- fs/afs/write.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fs/afs/write.c b/fs/afs/write.c index a523bb86915d..f68274c39f47 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -25,7 +25,8 @@ int afs_set_page_dirty(struct page *page) } /* - * prepare to perform part of a write to a page + * Prepare to perform part of a write to a page. Note that len may extend + * beyond the end of the page. */ int afs_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned flags, @@ -52,7 +53,8 @@ int afs_write_begin(struct file *file, struct address_space *mapping, return ret; index = page->index; - from = pos - index * PAGE_SIZE; + from = offset_in_thp(page, pos); + len = min_t(size_t, len, thp_size(page) - from); to = from + len; try_again: @@ -103,7 +105,8 @@ int afs_write_begin(struct file *file, struct address_space *mapping, } /* - * finalise part of a write to a page + * Finalise part of a write to a page. Note that len may extend beyond the end + * of the page. */ int afs_write_end(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, @@ -111,7 +114,7 @@ int afs_write_end(struct file *file, struct address_space *mapping, { struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); unsigned long priv; - unsigned int f, from = pos & (thp_size(page) - 1); + unsigned int f, from = offset_in_thp(page, pos); unsigned int t, to = from + copied; loff_t i_size, maybe_i_size;
next reply other threads:[~2021-06-14 13:20 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-14 13:20 David Howells [this message] 2021-06-14 13:20 ` [PATCH 2/3] afs: Fix afs_write_end() to handle short writes David Howells 2021-06-14 13:28 ` Matthew Wilcox 2021-06-14 13:37 ` David Howells 2021-06-14 13:46 ` Matthew Wilcox 2021-06-18 3:40 ` Al Viro 2021-06-14 14:04 ` David Howells 2021-06-14 14:37 ` Matthew Wilcox 2021-06-14 15:38 ` David Howells 2021-06-14 15:43 ` Matthew Wilcox 2021-06-14 21:11 ` David Howells 2021-06-14 13:20 ` [PATCH 3/3] netfs: fix test for whether we can skip read when writing beyond EOF David Howells 2021-06-15 17:01 ` Jeff Layton 2021-06-14 13:33 ` David Howells 2021-06-17 7:43 ` [PATCH 1/3] afs: Handle len being extending over page end in write_begin/write_end kernel test robot
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=162367681795.460125.11729955608839747375.stgit@warthog.procyon.org.uk \ --to=dhowells@redhat.com \ --cc=ceph-devel@vger.kernel.org \ --cc=jlayton@kernel.org \ --cc=linux-afs@lists.infradead.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=willy@infradead.org \ --subject='Re: [PATCH 1/3] afs: Handle len being extending over page end in write_begin/write_end' \ /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
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.