Re: [PATCH] fs: Remove set but not checked AOP_FLAG_UNINTERRUPTIBLE flag.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
> Cc: Nick Piggin <npiggin@xxxxxxxxx>
> Signed-off-by: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx>
> ---
>  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@xxxxxxxxxx>

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



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]
  Powered by Linux