mbox series

[v4,00/13] ext4: new mount API conversion

Message ID 20211027141857.33657-1-lczerner@redhat.com
Headers show
Series ext4: new mount API conversion | expand

Message

Lukas Czerner Oct. 27, 2021, 2:18 p.m. UTC
After some time I am once again resurrecting the patchset to convert the
ext4 to use the new mount API
(Documentation/filesystems/mount_api.txt).

The series can be applied on top of the current mainline tree and the work
is based on the patches from David Howells (thank you David). It was built
and tested with xfstests and a new ext4 mount options regression test that
was sent to the fstests list. You can check it out on github as well.

https://github.com/lczerner/xfstests/tree/ext4_mount_test

Here is a high level description of the patchset

1. Prepare the ext4 mount parameters required by the new mount API and use
   it for parsing, while still using the old API to get the options
   string.

  fs_parse: allow parameter value to be empty
  ext4: Add fs parameter specifications for mount options
  ext4: move option validation to a separate function
  ext4: Change handle_mount_opt() to use fs_parameter

2. Remove the use of ext4 super block from all the parsing code, because
   with the new mount API the parsing is going to be done before we even
   get the super block.

  ext4: Allow sb to be NULL in ext4_msg()
  ext4: move quota configuration out of handle_mount_opt()
  ext4: check ext2/3 compatibility outside handle_mount_opt()
  ext4: get rid of super block and sbi from handle_mount_ops()

3. Actually finish the separation of the parsing and super block setup
   into distinct steps. This is where the new ext4_fill_super() and
   ext4_remount() functions are created temporarily before the actual
   transition to the new API.

  ext4: Completely separate options parsing and sb setup

4. Make some last preparations and actually switch the ext4 to use the
   new mount API.

  ext4: clean up return values in handle_mount_opt()
  ext4: change token2str() to use ext4_param_specs
  ext4: switch to the new mount api

5. Cleanup the old unused structures and rearrange the parsing function.

  ext4: Remove unused match_table_t tokens

There is still a potential to do some cleanups and perhaps refactoring
such as using the fsparam_flag_no to remove the separate negative
options for example. However that can be done later after the conversion
to the new mount API which is the main purpose of the patchset.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
---
v3 -> v4: Fix some typos, print exact quotafile type in log messages.
          Remove explicit "Ext4:" from some log messages
V2 -> V3: Rebase to the newer kernel, including new mount options.
V1 -> V2: Rebase to the newer kernel

Lukas Czerner (13):
  fs_parse: allow parameter value to be empty
  ext4: Add fs parameter specifications for mount options
  ext4: move option validation to a separate function
  ext4: Change handle_mount_opt() to use fs_parameter
  ext4: Allow sb to be NULL in ext4_msg()
  ext4: move quota configuration out of handle_mount_opt()
  ext4: check ext2/3 compatibility outside handle_mount_opt()
  ext4: get rid of super block and sbi from handle_mount_ops()
  ext4: Completely separate options parsing and sb setup
  ext4: clean up return values in handle_mount_opt()
  ext4: change token2str() to use ext4_param_specs
  ext4: switch to the new mount api
  ext4: Remove unused match_table_t tokens

 fs/ext4/super.c           | 1848 +++++++++++++++++++++++--------------
 fs/fs_parser.c            |   31 +-
 include/linux/fs_parser.h |    2 +-
 3 files changed, 1189 insertions(+), 692 deletions(-)

Comments

Sedat Dilek Oct. 27, 2021, 9:39 p.m. UTC | #1
On Wed, Oct 27, 2021 at 11:27 PM Lukas Czerner <lczerner@redhat.com> wrote:
>
> After some time I am once again resurrecting the patchset to convert the
> ext4 to use the new mount API
> (Documentation/filesystems/mount_api.txt).
>
> The series can be applied on top of the current mainline tree and the work
> is based on the patches from David Howells (thank you David). It was built
> and tested with xfstests and a new ext4 mount options regression test that
> was sent to the fstests list. You can check it out on github as well.
>
> https://github.com/lczerner/xfstests/tree/ext4_mount_test
>
> Here is a high level description of the patchset
>
> 1. Prepare the ext4 mount parameters required by the new mount API and use
>    it for parsing, while still using the old API to get the options
>    string.
>
>   fs_parse: allow parameter value to be empty
>   ext4: Add fs parameter specifications for mount options
>   ext4: move option validation to a separate function
>   ext4: Change handle_mount_opt() to use fs_parameter
>
> 2. Remove the use of ext4 super block from all the parsing code, because
>    with the new mount API the parsing is going to be done before we even
>    get the super block.
>
>   ext4: Allow sb to be NULL in ext4_msg()
>   ext4: move quota configuration out of handle_mount_opt()
>   ext4: check ext2/3 compatibility outside handle_mount_opt()
>   ext4: get rid of super block and sbi from handle_mount_ops()
>
> 3. Actually finish the separation of the parsing and super block setup
>    into distinct steps. This is where the new ext4_fill_super() and
>    ext4_remount() functions are created temporarily before the actual
>    transition to the new API.
>
>   ext4: Completely separate options parsing and sb setup
>
> 4. Make some last preparations and actually switch the ext4 to use the
>    new mount API.
>
>   ext4: clean up return values in handle_mount_opt()
>   ext4: change token2str() to use ext4_param_specs
>   ext4: switch to the new mount api
>
> 5. Cleanup the old unused structures and rearrange the parsing function.
>
>   ext4: Remove unused match_table_t tokens
>
> There is still a potential to do some cleanups and perhaps refactoring
> such as using the fsparam_flag_no to remove the separate negative
> options for example. However that can be done later after the conversion
> to the new mount API which is the main purpose of the patchset.
>
> Signed-off-by: Lukas Czerner <lczerner@redhat.com>
> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
> ---

Is this the Git branch to pull from...?

https://github.com/lczerner/linux/tree/ext4_mount_api_rebase
https://github.com/lczerner/linux/commits/ext4_mount_api_rebase

Any other requirements or recommendations other than "ext4: ext4 mount
sanity test" (xfstests)?

Thanks.

- Sedat -

> v3 -> v4: Fix some typos, print exact quotafile type in log messages.
>           Remove explicit "Ext4:" from some log messages
> V2 -> V3: Rebase to the newer kernel, including new mount options.
> V1 -> V2: Rebase to the newer kernel
>
> Lukas Czerner (13):
>   fs_parse: allow parameter value to be empty
>   ext4: Add fs parameter specifications for mount options
>   ext4: move option validation to a separate function
>   ext4: Change handle_mount_opt() to use fs_parameter
>   ext4: Allow sb to be NULL in ext4_msg()
>   ext4: move quota configuration out of handle_mount_opt()
>   ext4: check ext2/3 compatibility outside handle_mount_opt()
>   ext4: get rid of super block and sbi from handle_mount_ops()
>   ext4: Completely separate options parsing and sb setup
>   ext4: clean up return values in handle_mount_opt()
>   ext4: change token2str() to use ext4_param_specs
>   ext4: switch to the new mount api
>   ext4: Remove unused match_table_t tokens
>
>  fs/ext4/super.c           | 1848 +++++++++++++++++++++++--------------
>  fs/fs_parser.c            |   31 +-
>  include/linux/fs_parser.h |    2 +-
>  3 files changed, 1189 insertions(+), 692 deletions(-)
>
> --
> 2.31.1
>
Lukas Czerner Oct. 28, 2021, 1:49 p.m. UTC | #2
On Wed, Oct 27, 2021 at 11:39:42PM +0200, Sedat Dilek wrote:
> On Wed, Oct 27, 2021 at 11:27 PM Lukas Czerner <lczerner@redhat.com> wrote:
> >
> > After some time I am once again resurrecting the patchset to convert the
> > ext4 to use the new mount API
> > (Documentation/filesystems/mount_api.txt).
> >
> > The series can be applied on top of the current mainline tree and the work
> > is based on the patches from David Howells (thank you David). It was built
> > and tested with xfstests and a new ext4 mount options regression test that
> > was sent to the fstests list. You can check it out on github as well.
> >
> > https://github.com/lczerner/xfstests/tree/ext4_mount_test
> >
> > Here is a high level description of the patchset
> >
> > 1. Prepare the ext4 mount parameters required by the new mount API and use
> >    it for parsing, while still using the old API to get the options
> >    string.
> >
> >   fs_parse: allow parameter value to be empty
> >   ext4: Add fs parameter specifications for mount options
> >   ext4: move option validation to a separate function
> >   ext4: Change handle_mount_opt() to use fs_parameter
> >
> > 2. Remove the use of ext4 super block from all the parsing code, because
> >    with the new mount API the parsing is going to be done before we even
> >    get the super block.
> >
> >   ext4: Allow sb to be NULL in ext4_msg()
> >   ext4: move quota configuration out of handle_mount_opt()
> >   ext4: check ext2/3 compatibility outside handle_mount_opt()
> >   ext4: get rid of super block and sbi from handle_mount_ops()
> >
> > 3. Actually finish the separation of the parsing and super block setup
> >    into distinct steps. This is where the new ext4_fill_super() and
> >    ext4_remount() functions are created temporarily before the actual
> >    transition to the new API.
> >
> >   ext4: Completely separate options parsing and sb setup
> >
> > 4. Make some last preparations and actually switch the ext4 to use the
> >    new mount API.
> >
> >   ext4: clean up return values in handle_mount_opt()
> >   ext4: change token2str() to use ext4_param_specs
> >   ext4: switch to the new mount api
> >
> > 5. Cleanup the old unused structures and rearrange the parsing function.
> >
> >   ext4: Remove unused match_table_t tokens
> >
> > There is still a potential to do some cleanups and perhaps refactoring
> > such as using the fsparam_flag_no to remove the separate negative
> > options for example. However that can be done later after the conversion
> > to the new mount API which is the main purpose of the patchset.
> >
> > Signed-off-by: Lukas Czerner <lczerner@redhat.com>
> > Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
> > ---
> 
> Is this the Git branch to pull from...?
> 
> https://github.com/lczerner/linux/tree/ext4_mount_api_rebase
> https://github.com/lczerner/linux/commits/ext4_mount_api_rebase

Hi,

yes that's the branch. I just updated it with the v4 changes.

> 
> Any other requirements or recommendations other than "ext4: ext4 mount
> sanity test" (xfstests)?

No special requirements I don't think. The xfstest patch is on the
fstests list with subject "ext4: add test for all ext4/ext3/ext2 mount
options", or you can checkout my github branch above.

My testing involved said test, regular xfstests run as well as different
ext4 kernel configuration (diabled quota, enabled debug and so on). In
order to test the "dax" options then dax capable device is needed of
course and the test shoud run that automatically with it.

Thanks a lot testing!
-Lukas

> 
> Thanks.
> 
> - Sedat -
> 
> > v3 -> v4: Fix some typos, print exact quotafile type in log messages.
> >           Remove explicit "Ext4:" from some log messages
> > V2 -> V3: Rebase to the newer kernel, including new mount options.
> > V1 -> V2: Rebase to the newer kernel
> >
> > Lukas Czerner (13):
> >   fs_parse: allow parameter value to be empty
> >   ext4: Add fs parameter specifications for mount options
> >   ext4: move option validation to a separate function
> >   ext4: Change handle_mount_opt() to use fs_parameter
> >   ext4: Allow sb to be NULL in ext4_msg()
> >   ext4: move quota configuration out of handle_mount_opt()
> >   ext4: check ext2/3 compatibility outside handle_mount_opt()
> >   ext4: get rid of super block and sbi from handle_mount_ops()
> >   ext4: Completely separate options parsing and sb setup
> >   ext4: clean up return values in handle_mount_opt()
> >   ext4: change token2str() to use ext4_param_specs
> >   ext4: switch to the new mount api
> >   ext4: Remove unused match_table_t tokens
> >
> >  fs/ext4/super.c           | 1848 +++++++++++++++++++++++--------------
> >  fs/fs_parser.c            |   31 +-
> >  include/linux/fs_parser.h |    2 +-
> >  3 files changed, 1189 insertions(+), 692 deletions(-)
> >
> > --
> > 2.31.1
> >
>
Theodore Ts'o Dec. 9, 2021, 7:17 p.m. UTC | #3
Hi Lukas,

I'm starting to process ext4 patches for the next merge window, and I
want to pull in the merge mount API conversions as one of the first
patches into the dev tree.

Should I use the v4 patch set or do you have a newer set of changes
that you'd like me to use?  There was a minor patch conflict in patch
#2, but that was pretty simple to fix up.

Thanks!

						- Ted
Lukas Czerner Dec. 9, 2021, 7:55 p.m. UTC | #4
On Thu, Dec 09, 2021 at 02:17:11PM -0500, Theodore Y. Ts'o wrote:
> Hi Lukas,
> 
> I'm starting to process ext4 patches for the next merge window, and I
> want to pull in the merge mount API conversions as one of the first
> patches into the dev tree.

Hi Ted,

that's great, thanks.

> 
> Should I use the v4 patch set or do you have a newer set of changes
> that you'd like me to use?  There was a minor patch conflict in patch
> #2, but that was pretty simple to fix up.

I don't have anything newer than this. I could rebase it if you'd like
me to, but it sounds like you've already done that pretty easily?

Thanks!
-Lukas

> 
> Thanks!
> 
> 						- Ted
>
Theodore Ts'o Dec. 9, 2021, 10:09 p.m. UTC | #5
On Thu, Dec 09, 2021 at 08:55:20PM +0100, Lukas Czerner wrote:
> > 
> > Should I use the v4 patch set or do you have a newer set of changes
> > that you'd like me to use?  There was a minor patch conflict in patch
> > #2, but that was pretty simple to fix up.
> 
> I don't have anything newer than this. I could rebase it if you'd like
> me to, but it sounds like you've already done that pretty easily?

Yep, I've done that and have run tests against it (including ext4/053
to test ext2/3/4 mount options).  I just haven't pushed it out pending
your confirmation that the v4 patchset was the one I should use.

Thanks!

						- Ted
Theodore Ts'o Dec. 9, 2021, 10:22 p.m. UTC | #6
On Wed, 27 Oct 2021 16:18:44 +0200, Lukas Czerner wrote:
> After some time I am once again resurrecting the patchset to convert the
> ext4 to use the new mount API
> (Documentation/filesystems/mount_api.txt).
> 
> The series can be applied on top of the current mainline tree and the work
> is based on the patches from David Howells (thank you David). It was built
> and tested with xfstests and a new ext4 mount options regression test that
> was sent to the fstests list. You can check it out on github as well.
> 
> [...]

Applied, thanks!

[01/13] fs_parse: allow parameter value to be empty
        commit: 6abfaaf124a81b7d2ab132cc2c9885baa14171e5
[02/13] ext4: Add fs parameter specifications for mount options
        commit: e5a185c26c11cbd1d386be8ee4c5e57b4f62273a
[03/13] ext4: move option validation to a separate function
        commit: 4c94bff967d90e91ace38a9886c1c7777a9c6f91
[04/13] ext4: Change handle_mount_opt() to use fs_parameter
        commit: 461c3af045d3ab949360fedbfb3ea1dcd9d8b22b
[05/13] ext4: Allow sb to be NULL in ext4_msg()
        commit: da812f611934bef16fe02d667a76df77ae9cf99a
[06/13] ext4: move quota configuration out of handle_mount_opt()
        commit: e6e268cb682290da29e3c8408493a4474307b8cc
[07/13] ext4: check ext2/3 compatibility outside handle_mount_opt()
        commit: b6bd243500b6024d92eaaacf592ed8588c2c75ea
[08/13] ext4: get rid of super block and sbi from handle_mount_ops()
        commit: 6e47a3cc68fc525428297a00524833361ebbb0e9
[09/13] ext4: Completely separate options parsing and sb setup
        commit: 7edfd85b1ffd36593011dec96ab395912a340418
[10/13] ext4: clean up return values in handle_mount_opt()
        commit: 02f960f8db1cd0aa9c182f8804b2b41ffd2c37b2
[11/13] ext4: change token2str() to use ext4_param_specs
        commit: 97d8a670b4531437d5b842cf68dafa6d1a932ddf
[12/13] ext4: switch to the new mount api
        commit: cebe85d570cf84804e848332d6721bc9e5300e07
[13/13] ext4: Remove unused match_table_t tokens
        commit: ba2e524d918ab72c0e5edc02354bd6cb43d005f8

Best regards,