lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 395/453] jffs2: Fix ignoring mounting options problem during remounting
    Date
    From: lizhe <lizhe67@huawei.com>

    commit 08cd274f9b8283a1da93e2ccab216a336da83525 upstream.

    The jffs2 mount options will be ignored when remounting jffs2.
    It can be easily reproduced with the steps listed below.
    1. mount -t jffs2 -o compr=none /dev/mtdblockx /mnt
    2. mount -o remount compr=zlib /mnt

    Since ec10a24f10c8, the option parsing happens before fill_super and
    then pass fc, which contains the options parsing results, to function
    jffs2_reconfigure during remounting. But function jffs2_reconfigure do
    not update c->mount_opts.

    This patch add a function jffs2_update_mount_opts to fix this problem.

    By the way, I notice that tmpfs use the same way to update remounting
    options. If it is necessary to unify them?

    Cc: <stable@vger.kernel.org>
    Fixes: ec10a24f10c8 ("vfs: Convert jffs2 to use the new mount API")
    Signed-off-by: lizhe <lizhe67@huawei.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/jffs2/super.c | 17 +++++++++++++++++
    1 file changed, 17 insertions(+)

    --- a/fs/jffs2/super.c
    +++ b/fs/jffs2/super.c
    @@ -221,11 +221,28 @@ static int jffs2_parse_param(struct fs_c
    return 0;
    }

    +static inline void jffs2_update_mount_opts(struct fs_context *fc)
    +{
    + struct jffs2_sb_info *new_c = fc->s_fs_info;
    + struct jffs2_sb_info *c = JFFS2_SB_INFO(fc->root->d_sb);
    +
    + mutex_lock(&c->alloc_sem);
    + if (new_c->mount_opts.override_compr) {
    + c->mount_opts.override_compr = new_c->mount_opts.override_compr;
    + c->mount_opts.compr = new_c->mount_opts.compr;
    + }
    + if (new_c->mount_opts.rp_size)
    + c->mount_opts.rp_size = new_c->mount_opts.rp_size;
    + mutex_unlock(&c->alloc_sem);
    +}
    +
    static int jffs2_reconfigure(struct fs_context *fc)
    {
    struct super_block *sb = fc->root->d_sb;

    sync_filesystem(sb);
    + jffs2_update_mount_opts(fc);
    +
    return jffs2_do_remount_fs(sb, fc);
    }


    \
     
     \ /
      Last update: 2020-12-28 14:56    [W:4.150 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site