All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Gruenbacher <agruenba@redhat.com>
To: Alexander Viro <viro@zeniv.linux.org.uk>,
	David Sterba <dsterba@suse.com>, Jeff Layton <jlayton@kernel.org>,
	"Theodore Ts'o" <tytso@mit.edu>, Chao Yu <chao@kernel.org>,
	Richard Weinberger <richard@nod.at>
Cc: linux-fsdevel@vger.kernel.org, Andreas Gruenbacher <agruenba@redhat.com>
Subject: [PATCH 4/7] ext4: Switch to page_mkwrite_check_truncate in ext4_page_mkwrite
Date: Thu, 13 Feb 2020 21:24:20 +0100	[thread overview]
Message-ID: <20200213202423.23455-5-agruenba@redhat.com> (raw)
In-Reply-To: <20200213202423.23455-1-agruenba@redhat.com>

Use the "page has been truncated" logic in page_mkwrite_check_truncate
instead of reimplementing it here.  Other than with the existing code,
fail with -EFAULT / VM_FAULT_NOPAGE when page_offset(page) == size here
as well, as should be expected.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Acked-by: Theodore Ts'o <tytso@mit.edu>
---
 fs/ext4/inode.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 1305b810c44a..4e00a6014fb3 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -5902,13 +5902,11 @@ vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)
 {
 	struct vm_area_struct *vma = vmf->vma;
 	struct page *page = vmf->page;
-	loff_t size;
 	unsigned long len;
 	int err;
 	vm_fault_t ret;
 	struct file *file = vma->vm_file;
 	struct inode *inode = file_inode(file);
-	struct address_space *mapping = inode->i_mapping;
 	handle_t *handle;
 	get_block_t *get_block;
 	int retries = 0;
@@ -5938,18 +5936,13 @@ vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)
 	}
 
 	lock_page(page);
-	size = i_size_read(inode);
-	/* Page got truncated from under us? */
-	if (page->mapping != mapping || page_offset(page) > size) {
+	err = page_mkwrite_check_truncate(page, inode);
+	if (err < 0) {
 		unlock_page(page);
-		ret = VM_FAULT_NOPAGE;
-		goto out;
+		goto out_ret;
 	}
+	len = err;
 
-	if (page->index == size >> PAGE_SHIFT)
-		len = size & ~PAGE_MASK;
-	else
-		len = PAGE_SIZE;
 	/*
 	 * Return if we have all the buffers mapped. This avoids the need to do
 	 * journal_start/journal_stop which can block and take a long time
-- 
2.24.1


  parent reply	other threads:[~2020-02-13 20:24 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-13 20:24 [PATCH 0/7] Switch to page_mkwrite_check_truncate Andreas Gruenbacher
2020-02-13 20:24 ` [PATCH 1/7] fs: Un-inline page_mkwrite_check_truncate Andreas Gruenbacher
2020-02-14 15:11   ` Jan Kara
2020-02-14 20:10   ` [PATCH v2] " Andreas Gruenbacher
2020-02-17 10:33     ` Jan Kara
2020-02-13 20:24 ` [PATCH 2/7] fs: Switch to page_mkwrite_check_truncate in block_page_mkwrite Andreas Gruenbacher
2020-02-13 20:24 ` [PATCH 3/7] ubifs: Switch to page_mkwrite_check_truncate in ubifs_vm_page_mkwrite Andreas Gruenbacher
2020-02-13 20:24 ` Andreas Gruenbacher [this message]
2020-02-13 20:24 ` [PATCH 5/7] f2fs: Switch to page_mkwrite_check_truncate in f2fs_vm_page_mkwrite Andreas Gruenbacher
2020-02-13 20:24 ` [PATCH 6/7] ceph: Switch to page_mkwrite_check_truncate in ceph_page_mkwrite Andreas Gruenbacher
2020-02-14  0:00   ` Jeff Layton
2020-02-13 20:24 ` [PATCH 7/7] btrfs: Switch to page_mkwrite_check_truncate in btrfs_page_mkwrite Andreas Gruenbacher

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=20200213202423.23455-5-agruenba@redhat.com \
    --to=agruenba@redhat.com \
    --cc=chao@kernel.org \
    --cc=dsterba@suse.com \
    --cc=jlayton@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=richard@nod.at \
    --cc=tytso@mit.edu \
    --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 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.