Re: [PATCH v2 2/3] ext4: factor out helper ext4_sample_last_mounted()

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

 



On Sun 22-04-18 18:10:58, Amir Goldstein wrote:
> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>

Looks good to me. You can add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

								Honza

> ---
>  fs/ext4/file.c | 82 ++++++++++++++++++++++++++++++++--------------------------
>  1 file changed, 46 insertions(+), 36 deletions(-)
> 
> diff --git a/fs/ext4/file.c b/fs/ext4/file.c
> index fb6f023622fe..065e95bb7186 100644
> --- a/fs/ext4/file.c
> +++ b/fs/ext4/file.c
> @@ -380,50 +380,60 @@ static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
>  	return 0;
>  }
>  
> -static int ext4_file_open(struct inode * inode, struct file * filp)
> +static int ext4_sample_last_mounted(struct super_block *sb,
> +				    struct vfsmount *mnt)
>  {
> -	struct super_block *sb = inode->i_sb;
> -	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
> -	struct vfsmount *mnt = filp->f_path.mnt;
> +	struct ext4_sb_info *sbi = EXT4_SB(sb);
>  	struct path path;
>  	char buf[64], *cp;
> +	handle_t *handle;
> +	int err;
> +
> +	if (likely(sbi->s_mount_flags & EXT4_MF_MNTDIR_SAMPLED))
> +		return 0;
> +
> +	if (sb_rdonly(sb))
> +		return 0;
> +
> +	sbi->s_mount_flags |= EXT4_MF_MNTDIR_SAMPLED;
> +	/*
> +	 * Sample where the filesystem has been mounted and
> +	 * store it in the superblock for sysadmin convenience
> +	 * when trying to sort through large numbers of block
> +	 * devices or filesystem images.
> +	 */
> +	memset(buf, 0, sizeof(buf));
> +	path.mnt = mnt;
> +	path.dentry = mnt->mnt_root;
> +	cp = d_path(&path, buf, sizeof(buf));
> +	if (IS_ERR(cp))
> +		return 0;
> +
> +	handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1);
> +	if (IS_ERR(handle))
> +		return PTR_ERR(handle);
> +	BUFFER_TRACE(sbi->s_sbh, "get_write_access");
> +	err = ext4_journal_get_write_access(handle, sbi->s_sbh);
> +	if (err)
> +		goto out;
> +	strlcpy(sbi->s_es->s_last_mounted, cp,
> +		sizeof(sbi->s_es->s_last_mounted));
> +	ext4_handle_dirty_super(handle, sb);
> +out:
> +	ext4_journal_stop(handle);
> +	return err;
> +}
> +
> +static int ext4_file_open(struct inode * inode, struct file * filp)
> +{
>  	int ret;
>  
>  	if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
>  		return -EIO;
>  
> -	if (unlikely(!(sbi->s_mount_flags & EXT4_MF_MNTDIR_SAMPLED) &&
> -		     !sb_rdonly(sb))) {
> -		sbi->s_mount_flags |= EXT4_MF_MNTDIR_SAMPLED;
> -		/*
> -		 * Sample where the filesystem has been mounted and
> -		 * store it in the superblock for sysadmin convenience
> -		 * when trying to sort through large numbers of block
> -		 * devices or filesystem images.
> -		 */
> -		memset(buf, 0, sizeof(buf));
> -		path.mnt = mnt;
> -		path.dentry = mnt->mnt_root;
> -		cp = d_path(&path, buf, sizeof(buf));
> -		if (!IS_ERR(cp)) {
> -			handle_t *handle;
> -			int err;
> -
> -			handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1);
> -			if (IS_ERR(handle))
> -				return PTR_ERR(handle);
> -			BUFFER_TRACE(sbi->s_sbh, "get_write_access");
> -			err = ext4_journal_get_write_access(handle, sbi->s_sbh);
> -			if (err) {
> -				ext4_journal_stop(handle);
> -				return err;
> -			}
> -			strlcpy(sbi->s_es->s_last_mounted, cp,
> -				sizeof(sbi->s_es->s_last_mounted));
> -			ext4_handle_dirty_super(handle, sb);
> -			ext4_journal_stop(handle);
> -		}
> -	}
> +	ret = ext4_sample_last_mounted(inode->i_sb, filp->f_path.mnt);
> +	if (ret)
> +		return ret;
>  
>  	ret = fscrypt_file_open(inode, filp);
>  	if (ret)
> -- 
> 2.7.4
> 
-- 
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR



[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux