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