2020-10-14 13:00:05

by Zhe Li

[permalink] [raw]
Subject: [PATCH 1/2] jffs2: fix ignoring mounting options problem during remounting

From: lizhe <[email protected]>

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?

Signed-off-by: lizhe <[email protected]>
---
fs/jffs2/super.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index 05d7878dfad1..4fd297bdf0f3 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -215,11 +215,28 @@ static int jffs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
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);
}

--
2.12.3


2020-11-06 02:32:41

by Zhe Li

[permalink] [raw]
Subject: Re: [PATCH 1/2] jffs2: fix ignoring mounting options problem during remounting

Maintainer ping?

Zhe

On Tue, 13 Oct 2020 15:22:37 +0800, Zhe Li wrote:
>
>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?
>
>Signed-off-by: lizhe <[email protected]>
>---
> fs/jffs2/super.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
>diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
>index 05d7878dfad1..4fd297bdf0f3 100644
>--- a/fs/jffs2/super.c
>+++ b/fs/jffs2/super.c
>@@ -215,11 +215,28 @@ static int jffs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
> 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);
> }
>
>--
>2.12.3
>

2020-11-10 21:36:52

by Richard Weinberger

[permalink] [raw]
Subject: Re: [PATCH 1/2] jffs2: fix ignoring mounting options problem during remounting

On Wed, Oct 14, 2020 at 9:01 AM Zhe Li <[email protected]> wrote:
>
> From: lizhe <[email protected]>
>
> 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.

Oh, a regression. Thanks for fixing.

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

If possible, sure. Maybe you can find a way to put the logic into fs/libfs.c

--
Thanks,
//richard