From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
djwong@kernel.org, viro@zeniv.linux.org.uk
Subject: [PATCH v2] vfs/dedupe: Pass file pointer to read_mapping_page
Date: Tue, 11 May 2021 19:40:19 +0100 [thread overview]
Message-ID: <20210511184019.1802090-1-willy@infradead.org> (raw)
Some filesystems (mostly networking) need a valid file pointer for
their ->readpage operation to supply credentials. Since there are no
bug reports, I assume none of them currently support deduplication.
It's just as easy to pass the struct file around as it is to pass the
struct inode around, and it sets a good example for other users as well
as being good future-proofing.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
fs/remap_range.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/fs/remap_range.c b/fs/remap_range.c
index e4a5fdd7ad7b..56f44a9b4ab6 100644
--- a/fs/remap_range.c
+++ b/fs/remap_range.c
@@ -158,11 +158,11 @@ static int generic_remap_check_len(struct inode *inode_in,
}
/* Read a page's worth of file data into the page cache. */
-static struct page *vfs_dedupe_get_page(struct inode *inode, loff_t offset)
+static struct page *vfs_dedupe_get_page(struct file *file, loff_t offset)
{
struct page *page;
- page = read_mapping_page(inode->i_mapping, offset >> PAGE_SHIFT, NULL);
+ page = read_mapping_page(file->f_mapping, offset >> PAGE_SHIFT, file);
if (IS_ERR(page))
return page;
if (!PageUptodate(page)) {
@@ -199,8 +199,8 @@ static void vfs_unlock_two_pages(struct page *page1, struct page *page2)
* Compare extents of two files to see if they are the same.
* Caller must have locked both inodes to prevent write races.
*/
-static int vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
- struct inode *dest, loff_t destoff,
+static int vfs_dedupe_file_range_compare(struct file *src, loff_t srcoff,
+ struct file *dest, loff_t destoff,
loff_t len, bool *is_same)
{
loff_t src_poff;
@@ -244,8 +244,8 @@ static int vfs_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
* someone is invalidating pages on us and we lose.
*/
if (!PageUptodate(src_page) || !PageUptodate(dest_page) ||
- src_page->mapping != src->i_mapping ||
- dest_page->mapping != dest->i_mapping) {
+ src_page->mapping != src->f_mapping ||
+ dest_page->mapping != dest->f_mapping) {
same = false;
goto unlock;
}
@@ -351,8 +351,8 @@ int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
if (remap_flags & REMAP_FILE_DEDUP) {
bool is_same = false;
- ret = vfs_dedupe_file_range_compare(inode_in, pos_in,
- inode_out, pos_out, *len, &is_same);
+ ret = vfs_dedupe_file_range_compare(file_in, pos_in,
+ file_out, pos_out, *len, &is_same);
if (ret)
return ret;
if (!is_same)
--
2.30.2
next reply other threads:[~2021-05-11 18:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-11 18:40 Matthew Wilcox (Oracle) [this message]
2021-05-11 20:06 ` [PATCH v2] vfs/dedupe: Pass file pointer to read_mapping_page Darrick J. Wong
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=20210511184019.1802090-1-willy@infradead.org \
--to=willy@infradead.org \
--cc=djwong@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).