lkml.org 
[lkml]   [2018]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 044/366] ext4: factor out helper ext4_sample_last_mounted()
    3.16.61-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Amir Goldstein <amir73il@gmail.com>

    commit 833a950882d33a7dfc319d5e152fdf35028936eb upstream.

    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    [bwh: Backported to 3.16:
    - Move up declaration of ret in ext4_file_open()
    - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    fs/ext4/file.c | 82 ++++++++++++++++++++++++++++----------------------
    1 file changed, 46 insertions(+), 36 deletions(-)

    --- a/fs/ext4/file.c
    +++ b/fs/ext4/file.c
    @@ -208,52 +208,64 @@ static int ext4_file_mmap(struct file *f
    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->s_flags & MS_RDONLY)
    + 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;
    +
    + ret = ext4_sample_last_mounted(inode->i_sb, filp->f_path.mnt);
    + if (ret)
    + return ret;

    - if (unlikely(!(sbi->s_mount_flags & EXT4_MF_MNTDIR_SAMPLED) &&
    - !(sb->s_flags & MS_RDONLY))) {
    - 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);
    - }
    - }
    /*
    * Set up the jbd2_inode if we are opening the inode for
    * writing and the journal is present
    */
    if (filp->f_mode & FMODE_WRITE) {
    - int ret = ext4_inode_attach_jinode(inode);
    + ret = ext4_inode_attach_jinode(inode);
    if (ret < 0)
    return ret;
    }
    \
     
     \ /
      Last update: 2018-11-11 21:10    [W:2.061 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site