All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@redhat.com>
To: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
	viro@zeniv.linux.org.uk
Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	Nick Piggin <npiggin@gmail.com>
Subject: Re: [PATCH] fs: Remove set but not checked AOP_FLAG_UNINTERRUPTIBLE flag.
Date: Fri, 17 Feb 2017 06:48:49 -0500	[thread overview]
Message-ID: <1487332129.2755.1.camel@redhat.com> (raw)
In-Reply-To: <1487328481-40596-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp>

On Fri, 2017-02-17 at 19:48 +0900, Tetsuo Handa wrote:
> Commit afddba49d18f346e ("fs: introduce write_begin, write_end, and
> perform_write aops") introduced AOP_FLAG_UNINTERRUPTIBLE flag which was
> checked in pagecache_write_begin(), but that check was removed by
> commit 4e02ed4b4a2fae34 ("fs: remove prepare_write/commit_write").
> 
> Between these two commits, commit d9414774dc0c7b39 ("cifs: Convert cifs
> to new aops.") added a check in cifs_write_begin(), but that check was
> soon removed by commit a98ee8c1c707fe32 ("[CIFS] fix regression in
> cifs_write_begin/cifs_write_end").
> 
> Therefore, AOP_FLAG_UNINTERRUPTIBLE flag is checked nowhere.
> Let's remove this flag. This patch has no functionality changes.
> 
> Cc: Jeff Layton <jlayton@redhat.com>
> Cc: Nick Piggin <npiggin@gmail.com>
> Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
> ---
>  Documentation/filesystems/vfs.txt |  3 +--
>  fs/buffer.c                       | 13 +++++--------
>  fs/exofs/dir.c                    |  3 +--
>  fs/hfs/extent.c                   |  4 ++--
>  fs/hfsplus/extents.c              |  5 ++---
>  fs/iomap.c                        | 13 +++----------
>  fs/namei.c                        |  2 +-
>  include/linux/fs.h                |  1 -
>  mm/filemap.c                      |  6 ------
>  9 files changed, 15 insertions(+), 35 deletions(-)
> 
> diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt
> index b968084..ff5a09e 100644
> --- a/Documentation/filesystems/vfs.txt
> +++ b/Documentation/filesystems/vfs.txt
> @@ -694,8 +694,7 @@ struct address_space_operations {
>  
>    write_end: After a successful write_begin, and data copy, write_end must
>          be called. len is the original len passed to write_begin, and copied
> -        is the amount that was able to be copied (copied == len is always true
> -	if write_begin was called with the AOP_FLAG_UNINTERRUPTIBLE flag).
> +        is the amount that was able to be copied.
>  
>          The filesystem must take care of unlocking the page and releasing it
>          refcount, and updating i_size.
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 28484b3..3974b89 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -2378,8 +2378,7 @@ int generic_cont_expand_simple(struct inode *inode, loff_t size)
>  		goto out;
>  
>  	err = pagecache_write_begin(NULL, mapping, size, 0,
> -				AOP_FLAG_UNINTERRUPTIBLE|AOP_FLAG_CONT_EXPAND,
> -				&page, &fsdata);
> +				    AOP_FLAG_CONT_EXPAND, &page, &fsdata);
>  	if (err)
>  		goto out;
>  
> @@ -2414,9 +2413,8 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,
>  		}
>  		len = PAGE_SIZE - zerofrom;
>  
> -		err = pagecache_write_begin(file, mapping, curpos, len,
> -						AOP_FLAG_UNINTERRUPTIBLE,
> -						&page, &fsdata);
> +		err = pagecache_write_begin(file, mapping, curpos, len, 0,
> +					    &page, &fsdata);
>  		if (err)
>  			goto out;
>  		zero_user(page, zerofrom, len);
> @@ -2448,9 +2446,8 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,
>  		}
>  		len = offset - zerofrom;
>  
> -		err = pagecache_write_begin(file, mapping, curpos, len,
> -						AOP_FLAG_UNINTERRUPTIBLE,
> -						&page, &fsdata);
> +		err = pagecache_write_begin(file, mapping, curpos, len, 0,
> +					    &page, &fsdata);
>  		if (err)
>  			goto out;
>  		zero_user(page, zerofrom, len);
> diff --git a/fs/exofs/dir.c b/fs/exofs/dir.c
> index 42f9a0a..8eeb694 100644
> --- a/fs/exofs/dir.c
> +++ b/fs/exofs/dir.c
> @@ -405,8 +405,7 @@ int exofs_set_link(struct inode *dir, struct exofs_dir_entry *de,
>  	int err;
>  
>  	lock_page(page);
> -	err = exofs_write_begin(NULL, page->mapping, pos, len,
> -				AOP_FLAG_UNINTERRUPTIBLE, &page, NULL);
> +	err = exofs_write_begin(NULL, page->mapping, pos, len, 0, &page, NULL);
>  	if (err)
>  		EXOFS_ERR("exofs_set_link: exofs_write_begin FAILED => %d\n",
>  			  err);
> diff --git a/fs/hfs/extent.c b/fs/hfs/extent.c
> index e33a0d3..5d01826 100644
> --- a/fs/hfs/extent.c
> +++ b/fs/hfs/extent.c
> @@ -485,8 +485,8 @@ void hfs_file_truncate(struct inode *inode)
>  
>  		/* XXX: Can use generic_cont_expand? */
>  		size = inode->i_size - 1;
> -		res = pagecache_write_begin(NULL, mapping, size+1, 0,
> -				AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata);
> +		res = pagecache_write_begin(NULL, mapping, size+1, 0, 0,
> +					    &page, &fsdata);
>  		if (!res) {
>  			res = pagecache_write_end(NULL, mapping, size+1, 0, 0,
>  					page, fsdata);
> diff --git a/fs/hfsplus/extents.c b/fs/hfsplus/extents.c
> index feca524..a3eb640 100644
> --- a/fs/hfsplus/extents.c
> +++ b/fs/hfsplus/extents.c
> @@ -545,9 +545,8 @@ void hfsplus_file_truncate(struct inode *inode)
>  		void *fsdata;
>  		loff_t size = inode->i_size;
>  
> -		res = pagecache_write_begin(NULL, mapping, size, 0,
> -						AOP_FLAG_UNINTERRUPTIBLE,
> -						&page, &fsdata);
> +		res = pagecache_write_begin(NULL, mapping, size, 0, 0,
> +					    &page, &fsdata);
>  		if (res)
>  			return;
>  		res = pagecache_write_end(NULL, mapping, size,
> diff --git a/fs/iomap.c b/fs/iomap.c
> index 0f85f24..f740ca3 100644
> --- a/fs/iomap.c
> +++ b/fs/iomap.c
> @@ -156,12 +156,6 @@
>  	ssize_t written = 0;
>  	unsigned int flags = AOP_FLAG_NOFS;
>  
> -	/*
> -	 * Copies from kernel address space cannot fail (NFSD is a big user).
> -	 */
> -	if (!iter_is_iovec(i))
> -		flags |= AOP_FLAG_UNINTERRUPTIBLE;
> -
>  	do {
>  		struct page *page;
>  		unsigned long offset;	/* Offset into pagecache page */
> @@ -289,8 +283,7 @@
>  			return PTR_ERR(rpage);
>  
>  		status = iomap_write_begin(inode, pos, bytes,
> -				AOP_FLAG_NOFS | AOP_FLAG_UNINTERRUPTIBLE,
> -				&page, iomap);
> +					   AOP_FLAG_NOFS, &page, iomap);
>  		put_page(rpage);
>  		if (unlikely(status))
>  			return status;
> @@ -341,8 +334,8 @@ static int iomap_zero(struct inode *inode, loff_t pos, unsigned offset,
>  	struct page *page;
>  	int status;
>  
> -	status = iomap_write_begin(inode, pos, bytes,
> -			AOP_FLAG_UNINTERRUPTIBLE | AOP_FLAG_NOFS, &page, iomap);
> +	status = iomap_write_begin(inode, pos, bytes, AOP_FLAG_NOFS, &page,
> +				   iomap);
>  	if (status)
>  		return status;
>  
> diff --git a/fs/namei.c b/fs/namei.c
> index e79ac7a..4fd1ee2 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -4756,7 +4756,7 @@ int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
>  	struct page *page;
>  	void *fsdata;
>  	int err;
> -	unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
> +	unsigned int flags = 0;
>  	if (nofs)
>  		flags |= AOP_FLAG_NOFS;
>  
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index de8ed0b..77a084a 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -250,7 +250,6 @@ enum positive_aop_returns {
>  	AOP_TRUNCATED_PAGE	= 0x80001,
>  };
>  
> -#define AOP_FLAG_UNINTERRUPTIBLE	0x0001 /* will not do a short write */
>  #define AOP_FLAG_CONT_EXPAND		0x0002 /* called from cont_expand */
>  #define AOP_FLAG_NOFS			0x0004 /* used by filesystem to direct
>  						* helper code (eg buffer layer)

Nit: should we shift the flag range down here, since we're removing 0x1?

> diff --git a/mm/filemap.c b/mm/filemap.c
> index 2ba46f4..e16047c 100644
> --- a/mm/filemap.c
> +++ b/mm/filemap.c
> @@ -2790,12 +2790,6 @@ ssize_t generic_perform_write(struct file *file,
>  	ssize_t written = 0;
>  	unsigned int flags = 0;
>  
> -	/*
> -	 * Copies from kernel address space cannot fail (NFSD is a big user).
> -	 */
> -	if (!iter_is_iovec(i))
> -		flags |= AOP_FLAG_UNINTERRUPTIBLE;
> -
>  	do {
>  		struct page *page;
>  		unsigned long offset;	/* Offset into pagecache page */

I always like removing cruft like this.

Reviewed-by: Jeff Layton <jlayton@redhat.com>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

      reply	other threads:[~2017-02-17 11:48 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-17 10:48 [PATCH] fs: Remove set but not checked AOP_FLAG_UNINTERRUPTIBLE flag Tetsuo Handa
2017-02-17 11:48 ` Jeff Layton [this message]

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=1487332129.2755.1.camel@redhat.com \
    --to=jlayton@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=npiggin@gmail.com \
    --cc=penguin-kernel@I-love.SAKURA.ne.jp \
    --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.