[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180423140452.njv5tndqi5ap3a75@quack2.suse.cz>
Date: Mon, 23 Apr 2018 16:04:52 +0200
From: Jan Kara <jack@...e.cz>
To: Amir Goldstein <amir73il@...il.com>
Cc: Theodore Tso <tytso@....edu>, Jan Kara <jack@...e.cz>,
linux-ext4@...r.kernel.org
Subject: Re: [PATCH v2 2/3] ext4: factor out helper ext4_sample_last_mounted()
On Sun 22-04-18 18:10:58, Amir Goldstein wrote:
> Signed-off-by: Amir Goldstein <amir73il@...il.com>
Looks good to me. You can add:
Reviewed-by: Jan Kara <jack@...e.cz>
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@...e.com>
SUSE Labs, CR
Powered by blists - more mailing lists