2021-08-19 00:30:46

by Kari Argillander

[permalink] [raw]
Subject: [PATCH v2 0/6] fs/ntfs3: Use new mount api and change some opts

This series modify ntfs3 to use new mount api as Christoph Hellwig
wish for. And also it must be done at some point.
lore.kernel.org/linux-fsdevel/[email protected]/

It also modify mount options noatime (not needed). Make new alias for
nls because kernel is changing to use it as described in here
lore.kernel.org/linux-fsdevel/[email protected]/

Modify mount opt no_acl_rules so we can use new mount api feature so
new one is (no)acl_rules. I'm open to suggestion what should we call
this if this is not good.

I did testing some testing and there seems to be unnecesarry remount
flags. Probably copy paste from another driver. Christoph also
suggested that maybe we should not let user remount with every
possible parameter, but for now comment can do. This can be addressed
later imo. Of course we can talk about it and I will do it if we have
solution.

Xfstests also show same errors than before this patch series. We will
of course wait Paragon's results also because they might have some
tests that I cannot yeat run.

Hopefully Konstantin will also comment in some point. And we have to
remember that we do not even have v28 in review process which this is
based on. So no rush to review. I just feeled that this is quite
ready and also that Konstantin can comment newer version so thats why
"already" patch series v2.

Offtopic:
I have also started to make shutdown protocol to ntfs3 driver so that
we can use that somepoint for testing with xfstests.

v2:
- Rewrite this cover leter
- Reorder noatime to first patch
- NLS loading with string
- Delete default_options function
- Remove remount flags
- Rename no_acl_rules mount option
- Making code cleaner
- Add comment that mount options should be tested

Kari Argillander (6):
fs/ntfs3: Remove unnecesarry mount option noatime
fs/ntfs3: Remove unnecesarry remount flag handling
fs/ntfs3: Use new api for mounting
fs/ntfs3: Make mount option nohidden more universal
fs/ntfs3: Add iocharset= mount option as alias for nls=
fs/ntfs3: Rename mount option no_acl_rules > (no)acl_rules

Documentation/filesystems/ntfs3.rst | 10 +-
fs/ntfs3/file.c | 2 +-
fs/ntfs3/ntfs_fs.h | 3 +-
fs/ntfs3/super.c | 413 ++++++++++++++--------------
fs/ntfs3/xattr.c | 2 +-
5 files changed, 213 insertions(+), 217 deletions(-)

--
2.25.1


2021-08-19 00:30:51

by Kari Argillander

[permalink] [raw]
Subject: [PATCH v2 2/6] fs/ntfs3: Remove unnecesarry remount flag handling

Remove unnecesarry remount flag handling. This does not do anything for
this driver. We have already set SB_NODIRATIME when we fill super. Also
noatime should be set from mount option. Now for some reson we try to
set it when remounting.

Lazytime part looks like it is copied from f2fs and there is own mount
parameter for it. That is why they use it. We do not set lazytime
anywhere in our code. So basically this just blocks lazytime when
remounting.

Signed-off-by: Kari Argillander <[email protected]>
---
fs/ntfs3/super.c | 2 --
1 file changed, 2 deletions(-)

diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
index 081ac875a61a..702da1437cfd 100644
--- a/fs/ntfs3/super.c
+++ b/fs/ntfs3/super.c
@@ -406,8 +406,6 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *data)

clear_mount_options(&old_opts);

- *flags = (*flags & ~SB_LAZYTIME) | (sb->s_flags & SB_LAZYTIME) |
- SB_NODIRATIME | SB_NOATIME;
ntfs_info(sb, "re-mounted. Opts: %s", orig_data);
err = 0;
goto out;
--
2.25.1

2021-08-19 00:32:08

by Kari Argillander

[permalink] [raw]
Subject: [PATCH v2 5/6] fs/ntfs3: Add iocharset= mount option as alias for nls=

Other fs drivers are using iocharset= mount option for specifying charset.
So add it also for ntfs3 and mark old nls= mount option as deprecated.

Signed-off-by: Kari Argillander <[email protected]>
---
Documentation/filesystems/ntfs3.rst | 4 ++--
fs/ntfs3/super.c | 12 ++++++++----
2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/Documentation/filesystems/ntfs3.rst b/Documentation/filesystems/ntfs3.rst
index af7158de6fde..ded706474825 100644
--- a/Documentation/filesystems/ntfs3.rst
+++ b/Documentation/filesystems/ntfs3.rst
@@ -32,12 +32,12 @@ generic ones.

===============================================================================

-nls=name This option informs the driver how to interpret path
+iocharset=name This option informs the driver how to interpret path
strings and translate them to Unicode and back. If
this option is not set, the default codepage will be
used (CONFIG_NLS_DEFAULT).
Examples:
- 'nls=utf8'
+ 'iocharset=utf8'

uid=
gid=
diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
index 8e86e1956486..c3c07c181f15 100644
--- a/fs/ntfs3/super.c
+++ b/fs/ntfs3/super.c
@@ -240,7 +240,7 @@ enum Opt {
Opt_nohidden,
Opt_showmeta,
Opt_acl,
- Opt_nls,
+ Opt_iocharset,
Opt_prealloc,
Opt_no_acs_rules,
Opt_err,
@@ -259,9 +259,13 @@ static const struct fs_parameter_spec ntfs_fs_parameters[] = {
fsparam_flag_no("hidden", Opt_nohidden),
fsparam_flag_no("acl", Opt_acl),
fsparam_flag_no("showmeta", Opt_showmeta),
- fsparam_string("nls", Opt_nls),
fsparam_flag_no("prealloc", Opt_prealloc),
fsparam_flag("no_acs_rules", Opt_no_acs_rules),
+ fsparam_string("iocharset", Opt_iocharset),
+
+ __fsparam(fs_param_is_string,
+ "nls", Opt_iocharset,
+ fs_param_deprecated, NULL),
{}
};

@@ -332,7 +336,7 @@ static int ntfs_fs_parse_param(struct fs_context *fc,
case Opt_showmeta:
opts->showmeta = result.negated ? 0 : 1;
break;
- case Opt_nls:
+ case Opt_iocharset:
opts->nls_name = param->string;
param->string = NULL;
break;
@@ -519,7 +523,7 @@ static int ntfs_show_options(struct seq_file *m, struct dentry *root)
if (opts->dmask)
seq_printf(m, ",dmask=%04o", ~opts->fs_dmask_inv);
if (opts->nls_name)
- seq_printf(m, ",nls=%s", opts->nls_name);
+ seq_printf(m, ",iocharset=%s", opts->nls_name);
if (opts->sys_immutable)
seq_puts(m, ",sys_immutable");
if (opts->discard)
--
2.25.1

2021-08-19 08:29:22

by Pali Rohár

[permalink] [raw]
Subject: Re: [PATCH v2 5/6] fs/ntfs3: Add iocharset= mount option as alias for nls=

On Thursday 19 August 2021 03:26:32 Kari Argillander wrote:
> Other fs drivers are using iocharset= mount option for specifying charset.
> So add it also for ntfs3 and mark old nls= mount option as deprecated.
>
> Signed-off-by: Kari Argillander <[email protected]>
> ---
> Documentation/filesystems/ntfs3.rst | 4 ++--
> fs/ntfs3/super.c | 12 ++++++++----
> 2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/filesystems/ntfs3.rst b/Documentation/filesystems/ntfs3.rst
> index af7158de6fde..ded706474825 100644
> --- a/Documentation/filesystems/ntfs3.rst
> +++ b/Documentation/filesystems/ntfs3.rst
> @@ -32,12 +32,12 @@ generic ones.
>
> ===============================================================================
>
> -nls=name This option informs the driver how to interpret path
> +iocharset=name This option informs the driver how to interpret path
> strings and translate them to Unicode and back. If
> this option is not set, the default codepage will be
> used (CONFIG_NLS_DEFAULT).
> Examples:
> - 'nls=utf8'
> + 'iocharset=utf8'
>
> uid=
> gid=
> diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
> index 8e86e1956486..c3c07c181f15 100644
> --- a/fs/ntfs3/super.c
> +++ b/fs/ntfs3/super.c
> @@ -240,7 +240,7 @@ enum Opt {
> Opt_nohidden,
> Opt_showmeta,
> Opt_acl,
> - Opt_nls,
> + Opt_iocharset,
> Opt_prealloc,
> Opt_no_acs_rules,
> Opt_err,
> @@ -259,9 +259,13 @@ static const struct fs_parameter_spec ntfs_fs_parameters[] = {
> fsparam_flag_no("hidden", Opt_nohidden),
> fsparam_flag_no("acl", Opt_acl),
> fsparam_flag_no("showmeta", Opt_showmeta),
> - fsparam_string("nls", Opt_nls),
> fsparam_flag_no("prealloc", Opt_prealloc),
> fsparam_flag("no_acs_rules", Opt_no_acs_rules),
> + fsparam_string("iocharset", Opt_iocharset),
> +
> + __fsparam(fs_param_is_string,
> + "nls", Opt_iocharset,
> + fs_param_deprecated, NULL),

Anyway, this is a new filesystem driver. Therefore, do we need to have
for it since beginning deprecated option?

> {}
> };
>
> @@ -332,7 +336,7 @@ static int ntfs_fs_parse_param(struct fs_context *fc,
> case Opt_showmeta:
> opts->showmeta = result.negated ? 0 : 1;
> break;
> - case Opt_nls:
> + case Opt_iocharset:
> opts->nls_name = param->string;
> param->string = NULL;
> break;
> @@ -519,7 +523,7 @@ static int ntfs_show_options(struct seq_file *m, struct dentry *root)
> if (opts->dmask)
> seq_printf(m, ",dmask=%04o", ~opts->fs_dmask_inv);
> if (opts->nls_name)
> - seq_printf(m, ",nls=%s", opts->nls_name);
> + seq_printf(m, ",iocharset=%s", opts->nls_name);
> if (opts->sys_immutable)
> seq_puts(m, ",sys_immutable");
> if (opts->discard)
> --
> 2.25.1
>

2021-08-19 09:46:44

by Kari Argillander

[permalink] [raw]
Subject: Re: [PATCH v2 5/6] fs/ntfs3: Add iocharset= mount option as alias for nls=

On Thu, Aug 19, 2021 at 10:26:58AM +0200, Pali Roh?r wrote:
> On Thursday 19 August 2021 03:26:32 Kari Argillander wrote:
> > Other fs drivers are using iocharset= mount option for specifying charset.
> > So add it also for ntfs3 and mark old nls= mount option as deprecated.
> >
> > Signed-off-by: Kari Argillander <[email protected]>
> > ---
> > Documentation/filesystems/ntfs3.rst | 4 ++--
> > fs/ntfs3/super.c | 12 ++++++++----
> > 2 files changed, 10 insertions(+), 6 deletions(-)
> >
> > diff --git a/Documentation/filesystems/ntfs3.rst b/Documentation/filesystems/ntfs3.rst
> > index af7158de6fde..ded706474825 100644
> > --- a/Documentation/filesystems/ntfs3.rst
> > +++ b/Documentation/filesystems/ntfs3.rst
> > @@ -32,12 +32,12 @@ generic ones.
> >
> > ===============================================================================
> >
> > -nls=name This option informs the driver how to interpret path
> > +iocharset=name This option informs the driver how to interpret path
> > strings and translate them to Unicode and back. If
> > this option is not set, the default codepage will be
> > used (CONFIG_NLS_DEFAULT).
> > Examples:
> > - 'nls=utf8'
> > + 'iocharset=utf8'
> >
> > uid=
> > gid=
> > diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
> > index 8e86e1956486..c3c07c181f15 100644
> > --- a/fs/ntfs3/super.c
> > +++ b/fs/ntfs3/super.c
> > @@ -240,7 +240,7 @@ enum Opt {
> > Opt_nohidden,
> > Opt_showmeta,
> > Opt_acl,
> > - Opt_nls,
> > + Opt_iocharset,
> > Opt_prealloc,
> > Opt_no_acs_rules,
> > Opt_err,
> > @@ -259,9 +259,13 @@ static const struct fs_parameter_spec ntfs_fs_parameters[] = {
> > fsparam_flag_no("hidden", Opt_nohidden),
> > fsparam_flag_no("acl", Opt_acl),
> > fsparam_flag_no("showmeta", Opt_showmeta),
> > - fsparam_string("nls", Opt_nls),
> > fsparam_flag_no("prealloc", Opt_prealloc),
> > fsparam_flag("no_acs_rules", Opt_no_acs_rules),
> > + fsparam_string("iocharset", Opt_iocharset),
> > +
> > + __fsparam(fs_param_is_string,
> > + "nls", Opt_iocharset,
> > + fs_param_deprecated, NULL),
>
> Anyway, this is a new filesystem driver. Therefore, do we need to have
> for it since beginning deprecated option?

I have also thought about this. In my mind this is new driver to our tree.
But is been available from Paragon. Their customers may migrate to this
so let's give them easy path to it. They also have free version and
there is many Linux user who will switch to this when this is available.

Another thing what I been thinking is that how we will switch from
ntfs->ntfs3. To give easy path to this driver then we should in some
point add ntfs driver mount options to this one. Maybe not totally
funtional, but so that mounting is possible. Current ntfs driver had nls
option so it makes sense to add it here. We might even like to think
ntfs-3g mount options because that is more used.

Of course we can just drop this. But I like that user experience is good
with kernel. And if we can make that little more pleasent with couple
line of trivial code then imo let's do it. We just need to make sure we
drop these in one point of time. It is too often these kind of things
will live in kernel "internity".

>
> > {}
> > };
> >
> > @@ -332,7 +336,7 @@ static int ntfs_fs_parse_param(struct fs_context *fc,
> > case Opt_showmeta:
> > opts->showmeta = result.negated ? 0 : 1;
> > break;
> > - case Opt_nls:
> > + case Opt_iocharset:
> > opts->nls_name = param->string;
> > param->string = NULL;
> > break;
> > @@ -519,7 +523,7 @@ static int ntfs_show_options(struct seq_file *m, struct dentry *root)
> > if (opts->dmask)
> > seq_printf(m, ",dmask=%04o", ~opts->fs_dmask_inv);
> > if (opts->nls_name)
> > - seq_printf(m, ",nls=%s", opts->nls_name);
> > + seq_printf(m, ",iocharset=%s", opts->nls_name);
> > if (opts->sys_immutable)
> > seq_puts(m, ",sys_immutable");
> > if (opts->discard)
> > --
> > 2.25.1
> >
>

2021-08-19 09:59:36

by Pali Rohár

[permalink] [raw]
Subject: Re: [PATCH v2 5/6] fs/ntfs3: Add iocharset= mount option as alias for nls=

On Thursday 19 August 2021 12:45:32 Kari Argillander wrote:
> On Thu, Aug 19, 2021 at 10:26:58AM +0200, Pali Rohár wrote:
> > On Thursday 19 August 2021 03:26:32 Kari Argillander wrote:
> > > Other fs drivers are using iocharset= mount option for specifying charset.
> > > So add it also for ntfs3 and mark old nls= mount option as deprecated.
> > >
> > > Signed-off-by: Kari Argillander <[email protected]>
> > > ---
> > > Documentation/filesystems/ntfs3.rst | 4 ++--
> > > fs/ntfs3/super.c | 12 ++++++++----
> > > 2 files changed, 10 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/Documentation/filesystems/ntfs3.rst b/Documentation/filesystems/ntfs3.rst
> > > index af7158de6fde..ded706474825 100644
> > > --- a/Documentation/filesystems/ntfs3.rst
> > > +++ b/Documentation/filesystems/ntfs3.rst
> > > @@ -32,12 +32,12 @@ generic ones.
> > >
> > > ===============================================================================
> > >
> > > -nls=name This option informs the driver how to interpret path
> > > +iocharset=name This option informs the driver how to interpret path
> > > strings and translate them to Unicode and back. If
> > > this option is not set, the default codepage will be
> > > used (CONFIG_NLS_DEFAULT).
> > > Examples:
> > > - 'nls=utf8'
> > > + 'iocharset=utf8'
> > >
> > > uid=
> > > gid=
> > > diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c
> > > index 8e86e1956486..c3c07c181f15 100644
> > > --- a/fs/ntfs3/super.c
> > > +++ b/fs/ntfs3/super.c
> > > @@ -240,7 +240,7 @@ enum Opt {
> > > Opt_nohidden,
> > > Opt_showmeta,
> > > Opt_acl,
> > > - Opt_nls,
> > > + Opt_iocharset,
> > > Opt_prealloc,
> > > Opt_no_acs_rules,
> > > Opt_err,
> > > @@ -259,9 +259,13 @@ static const struct fs_parameter_spec ntfs_fs_parameters[] = {
> > > fsparam_flag_no("hidden", Opt_nohidden),
> > > fsparam_flag_no("acl", Opt_acl),
> > > fsparam_flag_no("showmeta", Opt_showmeta),
> > > - fsparam_string("nls", Opt_nls),
> > > fsparam_flag_no("prealloc", Opt_prealloc),
> > > fsparam_flag("no_acs_rules", Opt_no_acs_rules),
> > > + fsparam_string("iocharset", Opt_iocharset),
> > > +
> > > + __fsparam(fs_param_is_string,
> > > + "nls", Opt_iocharset,
> > > + fs_param_deprecated, NULL),
> >
> > Anyway, this is a new filesystem driver. Therefore, do we need to have
> > for it since beginning deprecated option?
>
> I have also thought about this. In my mind this is new driver to our tree.
> But is been available from Paragon. Their customers may migrate to this
> so let's give them easy path to it. They also have free version and
> there is many Linux user who will switch to this when this is available.
>
> Another thing what I been thinking is that how we will switch from
> ntfs->ntfs3. To give easy path to this driver then we should in some
> point add ntfs driver mount options to this one. Maybe not totally
> funtional, but so that mounting is possible. Current ntfs driver had nls
> option so it makes sense to add it here. We might even like to think
> ntfs-3g mount options because that is more used.
>
> Of course we can just drop this. But I like that user experience is good
> with kernel. And if we can make that little more pleasent with couple
> line of trivial code then imo let's do it. We just need to make sure we
> drop these in one point of time. It is too often these kind of things
> will live in kernel "internity".

Makes sense. Sometimes it is better to introduce legacy/deprecated code
also to the new one.

In case this ntfs3 driver is going to replace ntfs driver then it would
have to understand all options supported by ntfs, even those which are
already deprecated and also those which will be deprecated in future.
(Until there is a decision to drop it)

> >
> > > {}
> > > };
> > >
> > > @@ -332,7 +336,7 @@ static int ntfs_fs_parse_param(struct fs_context *fc,
> > > case Opt_showmeta:
> > > opts->showmeta = result.negated ? 0 : 1;
> > > break;
> > > - case Opt_nls:
> > > + case Opt_iocharset:
> > > opts->nls_name = param->string;
> > > param->string = NULL;
> > > break;
> > > @@ -519,7 +523,7 @@ static int ntfs_show_options(struct seq_file *m, struct dentry *root)
> > > if (opts->dmask)
> > > seq_printf(m, ",dmask=%04o", ~opts->fs_dmask_inv);
> > > if (opts->nls_name)
> > > - seq_printf(m, ",nls=%s", opts->nls_name);
> > > + seq_printf(m, ",iocharset=%s", opts->nls_name);
> > > if (opts->sys_immutable)
> > > seq_puts(m, ",sys_immutable");
> > > if (opts->discard)
> > > --
> > > 2.25.1
> > >
> >

2021-08-24 08:01:04

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH v2 2/6] fs/ntfs3: Remove unnecesarry remount flag handling

On Thu, Aug 19, 2021 at 03:26:29AM +0300, Kari Argillander wrote:
> Remove unnecesarry remount flag handling. This does not do anything for
> this driver. We have already set SB_NODIRATIME when we fill super. Also
> noatime should be set from mount option. Now for some reson we try to
> set it when remounting.
>
> Lazytime part looks like it is copied from f2fs and there is own mount
> parameter for it. That is why they use it. We do not set lazytime
> anywhere in our code. So basically this just blocks lazytime when
> remounting.
>
> Signed-off-by: Kari Argillander <[email protected]>

Looks good,

Reviewed-by: Christoph Hellwig <[email protected]>

2021-08-24 11:18:25

by Christian Brauner

[permalink] [raw]
Subject: Re: [PATCH v2 2/6] fs/ntfs3: Remove unnecesarry remount flag handling

On Thu, Aug 19, 2021 at 03:26:29AM +0300, Kari Argillander wrote:
> Remove unnecesarry remount flag handling. This does not do anything for
> this driver. We have already set SB_NODIRATIME when we fill super. Also
> noatime should be set from mount option. Now for some reson we try to
> set it when remounting.
>
> Lazytime part looks like it is copied from f2fs and there is own mount
> parameter for it. That is why they use it. We do not set lazytime
> anywhere in our code. So basically this just blocks lazytime when
> remounting.
>
> Signed-off-by: Kari Argillander <[email protected]>
> ---

Sounds good. Thanks!
Acked-by: Christian Brauner <[email protected]>