mbox series

[v6,00/27] nfs: Mount API conversion

Message ID 20191210123115.1655-1-smayhew@redhat.com (mailing list archive)
Headers show
Series nfs: Mount API conversion | expand

Message

Scott Mayhew Dec. 10, 2019, 12:30 p.m. UTC
Hi Anna, Trond,

Here's a set of patches that converts NFS to use the mount API.  Note that
there are a lot of preliminary patches, some from David and some from Al.
The final patch (the one that does the actual conversion) from the David's
initial posting has been split into 5 separate patches, and the entire set
has been rebased on top of v5.5-rc1.

Changes since v5:
- fixed possible derefence of error pointer in nfs4_validate_fspath()
  reported by Dan Carpenter
- rebased on top of v5.5-rc1
Changes since v4:
- further split the original "NFS: Add fs_context support" patch (new
  patch is about 25% smaller than the v4 patch)
- fixed NFSv4 referral mounts (broken in the original patch)
- fixed leak of nfs_fattr when fs_context is freed
Changes since v3:
- changed license and copyright text in fs/nfs/fs_context.c
Changes since v2:
- fixed the conversion of the nconnect= option
- added '#if IS_ENABLED(CONFIG_NFS_V4)' around nfs4_parse_monolithic()
  to avoid unused-function warning when compiling with v4 disabled
Chagnes since v1:
- split up patch 23 into 4 separate patches

-Scott

Al Viro (15):
  saner calling conventions for nfs_fs_mount_common()
  nfs: stash server into struct nfs_mount_info
  nfs: lift setting mount_info from nfs4_remote{,_referral}_mount
  nfs: fold nfs4_remote_fs_type and nfs4_remote_referral_fs_type
  nfs: don't bother setting/restoring export_path around
    do_nfs_root_mount()
  nfs4: fold nfs_do_root_mount/nfs_follow_remote_path
  nfs: lift setting mount_info from nfs_xdev_mount()
  nfs: stash nfs_subversion reference into nfs_mount_info
  nfs: don't bother passing nfs_subversion to ->try_mount() and
    nfs_fs_mount_common()
  nfs: merge xdev and remote file_system_type
  nfs: unexport nfs_fs_mount_common()
  nfs: don't pass nfs_subversion to ->create_server()
  nfs: get rid of mount_info ->fill_super()
  nfs_clone_sb_security(): simplify the check for server bogosity
  nfs: get rid of ->set_security()

David Howells (8):
  NFS: Move mount parameterisation bits into their own file
  NFS: Constify mount argument match tables
  NFS: Rename struct nfs_parsed_mount_data to struct nfs_fs_context
  NFS: Split nfs_parse_mount_options()
  NFS: Deindent nfs_fs_context_parse_option()
  NFS: Add a small buffer in nfs_fs_context to avoid string dup
  NFS: Do some tidying of the parsing code
  NFS: Add fs_context support.

Scott Mayhew (4):
  NFS: rename nfs_fs_context pointer arg in a few functions
  NFS: Convert mount option parsing to use functionality from
    fs_parser.h
  NFS: Additional refactoring for fs_context conversion
  NFS: Attach supplementary error information to fs_context.

 fs/nfs/Makefile         |    2 +-
 fs/nfs/client.c         |   80 +-
 fs/nfs/fs_context.c     | 1424 +++++++++++++++++++++++++
 fs/nfs/fscache.c        |    2 +-
 fs/nfs/getroot.c        |   73 +-
 fs/nfs/internal.h       |  132 +--
 fs/nfs/namespace.c      |  146 ++-
 fs/nfs/nfs3_fs.h        |    2 +-
 fs/nfs/nfs3client.c     |    6 +-
 fs/nfs/nfs3proc.c       |    2 +-
 fs/nfs/nfs4_fs.h        |    9 +-
 fs/nfs/nfs4client.c     |   99 +-
 fs/nfs/nfs4file.c       |    1 +
 fs/nfs/nfs4namespace.c  |  292 +++---
 fs/nfs/nfs4proc.c       |    2 +-
 fs/nfs/nfs4super.c      |  257 ++---
 fs/nfs/proc.c           |    2 +-
 fs/nfs/super.c          | 2217 +++++----------------------------------
 include/linux/nfs_xdr.h |    9 +-
 19 files changed, 2287 insertions(+), 2470 deletions(-)
 create mode 100644 fs/nfs/fs_context.c

Comments

Schumaker, Anna Dec. 10, 2019, 9:16 p.m. UTC | #1
Hi Scott,

On Tue, 2019-12-10 at 07:30 -0500, Scott Mayhew wrote:
> Hi Anna, Trond,
> 
> Here's a set of patches that converts NFS to use the mount API.  Note that
> there are a lot of preliminary patches, some from David and some from Al.
> The final patch (the one that does the actual conversion) from the David's
> initial posting has been split into 5 separate patches, and the entire set
> has been rebased on top of v5.5-rc1.

Thanks for the updated patches! Everything looks okay to me, but I've only
tested with the legacy mount command. I'm curious if you've tested it using the
new system?

Thanks,
Anna

> 
> Changes since v5:
> - fixed possible derefence of error pointer in nfs4_validate_fspath()
>   reported by Dan Carpenter
> - rebased on top of v5.5-rc1
> Changes since v4:
> - further split the original "NFS: Add fs_context support" patch (new
>   patch is about 25% smaller than the v4 patch)
> - fixed NFSv4 referral mounts (broken in the original patch)
> - fixed leak of nfs_fattr when fs_context is freed
> Changes since v3:
> - changed license and copyright text in fs/nfs/fs_context.c
> Changes since v2:
> - fixed the conversion of the nconnect= option
> - added '#if IS_ENABLED(CONFIG_NFS_V4)' around nfs4_parse_monolithic()
>   to avoid unused-function warning when compiling with v4 disabled
> Chagnes since v1:
> - split up patch 23 into 4 separate patches
> 
> -Scott
> 
> Al Viro (15):
>   saner calling conventions for nfs_fs_mount_common()
>   nfs: stash server into struct nfs_mount_info
>   nfs: lift setting mount_info from nfs4_remote{,_referral}_mount
>   nfs: fold nfs4_remote_fs_type and nfs4_remote_referral_fs_type
>   nfs: don't bother setting/restoring export_path around
>     do_nfs_root_mount()
>   nfs4: fold nfs_do_root_mount/nfs_follow_remote_path
>   nfs: lift setting mount_info from nfs_xdev_mount()
>   nfs: stash nfs_subversion reference into nfs_mount_info
>   nfs: don't bother passing nfs_subversion to ->try_mount() and
>     nfs_fs_mount_common()
>   nfs: merge xdev and remote file_system_type
>   nfs: unexport nfs_fs_mount_common()
>   nfs: don't pass nfs_subversion to ->create_server()
>   nfs: get rid of mount_info ->fill_super()
>   nfs_clone_sb_security(): simplify the check for server bogosity
>   nfs: get rid of ->set_security()
> 
> David Howells (8):
>   NFS: Move mount parameterisation bits into their own file
>   NFS: Constify mount argument match tables
>   NFS: Rename struct nfs_parsed_mount_data to struct nfs_fs_context
>   NFS: Split nfs_parse_mount_options()
>   NFS: Deindent nfs_fs_context_parse_option()
>   NFS: Add a small buffer in nfs_fs_context to avoid string dup
>   NFS: Do some tidying of the parsing code
>   NFS: Add fs_context support.
> 
> Scott Mayhew (4):
>   NFS: rename nfs_fs_context pointer arg in a few functions
>   NFS: Convert mount option parsing to use functionality from
>     fs_parser.h
>   NFS: Additional refactoring for fs_context conversion
>   NFS: Attach supplementary error information to fs_context.
> 
>  fs/nfs/Makefile         |    2 +-
>  fs/nfs/client.c         |   80 +-
>  fs/nfs/fs_context.c     | 1424 +++++++++++++++++++++++++
>  fs/nfs/fscache.c        |    2 +-
>  fs/nfs/getroot.c        |   73 +-
>  fs/nfs/internal.h       |  132 +--
>  fs/nfs/namespace.c      |  146 ++-
>  fs/nfs/nfs3_fs.h        |    2 +-
>  fs/nfs/nfs3client.c     |    6 +-
>  fs/nfs/nfs3proc.c       |    2 +-
>  fs/nfs/nfs4_fs.h        |    9 +-
>  fs/nfs/nfs4client.c     |   99 +-
>  fs/nfs/nfs4file.c       |    1 +
>  fs/nfs/nfs4namespace.c  |  292 +++---
>  fs/nfs/nfs4proc.c       |    2 +-
>  fs/nfs/nfs4super.c      |  257 ++---
>  fs/nfs/proc.c           |    2 +-
>  fs/nfs/super.c          | 2217 +++++----------------------------------
>  include/linux/nfs_xdr.h |    9 +-
>  19 files changed, 2287 insertions(+), 2470 deletions(-)
>  create mode 100644 fs/nfs/fs_context.c
>
Scott Mayhew Dec. 11, 2019, 1:21 p.m. UTC | #2
On Tue, 10 Dec 2019, Schumaker, Anna wrote:

> Hi Scott,
> 
> On Tue, 2019-12-10 at 07:30 -0500, Scott Mayhew wrote:
> > Hi Anna, Trond,
> > 
> > Here's a set of patches that converts NFS to use the mount API.  Note that
> > there are a lot of preliminary patches, some from David and some from Al.
> > The final patch (the one that does the actual conversion) from the David's
> > initial posting has been split into 5 separate patches, and the entire set
> > has been rebased on top of v5.5-rc1.
> 
> Thanks for the updated patches! Everything looks okay to me, but I've only
> tested with the legacy mount command. I'm curious if you've tested it using the
> new system?

My testing was also with the legacy mount command.  I can work on
testing with the new syscalls now.

-Scott

> 
> Thanks,
> Anna
> 
> > 
> > Changes since v5:
> > - fixed possible derefence of error pointer in nfs4_validate_fspath()
> >   reported by Dan Carpenter
> > - rebased on top of v5.5-rc1
> > Changes since v4:
> > - further split the original "NFS: Add fs_context support" patch (new
> >   patch is about 25% smaller than the v4 patch)
> > - fixed NFSv4 referral mounts (broken in the original patch)
> > - fixed leak of nfs_fattr when fs_context is freed
> > Changes since v3:
> > - changed license and copyright text in fs/nfs/fs_context.c
> > Changes since v2:
> > - fixed the conversion of the nconnect= option
> > - added '#if IS_ENABLED(CONFIG_NFS_V4)' around nfs4_parse_monolithic()
> >   to avoid unused-function warning when compiling with v4 disabled
> > Chagnes since v1:
> > - split up patch 23 into 4 separate patches
> > 
> > -Scott
> > 
> > Al Viro (15):
> >   saner calling conventions for nfs_fs_mount_common()
> >   nfs: stash server into struct nfs_mount_info
> >   nfs: lift setting mount_info from nfs4_remote{,_referral}_mount
> >   nfs: fold nfs4_remote_fs_type and nfs4_remote_referral_fs_type
> >   nfs: don't bother setting/restoring export_path around
> >     do_nfs_root_mount()
> >   nfs4: fold nfs_do_root_mount/nfs_follow_remote_path
> >   nfs: lift setting mount_info from nfs_xdev_mount()
> >   nfs: stash nfs_subversion reference into nfs_mount_info
> >   nfs: don't bother passing nfs_subversion to ->try_mount() and
> >     nfs_fs_mount_common()
> >   nfs: merge xdev and remote file_system_type
> >   nfs: unexport nfs_fs_mount_common()
> >   nfs: don't pass nfs_subversion to ->create_server()
> >   nfs: get rid of mount_info ->fill_super()
> >   nfs_clone_sb_security(): simplify the check for server bogosity
> >   nfs: get rid of ->set_security()
> > 
> > David Howells (8):
> >   NFS: Move mount parameterisation bits into their own file
> >   NFS: Constify mount argument match tables
> >   NFS: Rename struct nfs_parsed_mount_data to struct nfs_fs_context
> >   NFS: Split nfs_parse_mount_options()
> >   NFS: Deindent nfs_fs_context_parse_option()
> >   NFS: Add a small buffer in nfs_fs_context to avoid string dup
> >   NFS: Do some tidying of the parsing code
> >   NFS: Add fs_context support.
> > 
> > Scott Mayhew (4):
> >   NFS: rename nfs_fs_context pointer arg in a few functions
> >   NFS: Convert mount option parsing to use functionality from
> >     fs_parser.h
> >   NFS: Additional refactoring for fs_context conversion
> >   NFS: Attach supplementary error information to fs_context.
> > 
> >  fs/nfs/Makefile         |    2 +-
> >  fs/nfs/client.c         |   80 +-
> >  fs/nfs/fs_context.c     | 1424 +++++++++++++++++++++++++
> >  fs/nfs/fscache.c        |    2 +-
> >  fs/nfs/getroot.c        |   73 +-
> >  fs/nfs/internal.h       |  132 +--
> >  fs/nfs/namespace.c      |  146 ++-
> >  fs/nfs/nfs3_fs.h        |    2 +-
> >  fs/nfs/nfs3client.c     |    6 +-
> >  fs/nfs/nfs3proc.c       |    2 +-
> >  fs/nfs/nfs4_fs.h        |    9 +-
> >  fs/nfs/nfs4client.c     |   99 +-
> >  fs/nfs/nfs4file.c       |    1 +
> >  fs/nfs/nfs4namespace.c  |  292 +++---
> >  fs/nfs/nfs4proc.c       |    2 +-
> >  fs/nfs/nfs4super.c      |  257 ++---
> >  fs/nfs/proc.c           |    2 +-
> >  fs/nfs/super.c          | 2217 +++++----------------------------------
> >  include/linux/nfs_xdr.h |    9 +-
> >  19 files changed, 2287 insertions(+), 2470 deletions(-)
> >  create mode 100644 fs/nfs/fs_context.c
> >
Scott Mayhew Dec. 13, 2019, 9:39 p.m. UTC | #3
On Tue, 10 Dec 2019, Schumaker, Anna wrote:

> Hi Scott,
> 
> On Tue, 2019-12-10 at 07:30 -0500, Scott Mayhew wrote:
> > Hi Anna, Trond,
> > 
> > Here's a set of patches that converts NFS to use the mount API.  Note that
> > there are a lot of preliminary patches, some from David and some from Al.
> > The final patch (the one that does the actual conversion) from the David's
> > initial posting has been split into 5 separate patches, and the entire set
> > has been rebased on top of v5.5-rc1.
> 
> Thanks for the updated patches! Everything looks okay to me, but I've only
> tested with the legacy mount command. I'm curious if you've tested it using the
> new system?

I've hacked up mount.nfs for testing the new syscalls (for mounting... I
haven't quite figured out remounting yet) here:
https://github.com/scottmayhew/nfs-utils/tree/fscontext

It seems to be working okay, with one exception.  If I mount the same
NFS export with the same mount options multiple times, then I get
multiple mounts:

[root@fedora30 ~]# mount.nfs nfs:/export /mnt/t
[root@fedora30 ~]# mount.nfs nfs:/export /mnt/t
[root@fedora30 ~]# grep /mnt/t /proc/mounts
nfs:/export /mnt/t nfs rw,seclabel,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5,clientaddr=192.168.122.239,local_lock=none,addr=192.168.122.3 0 0
nfs:/export /mnt/t nfs rw,seclabel,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5,clientaddr=192.168.122.239,local_lock=none,addr=192.168.122.3 0 0

That doesn't happen with the mount() syscall:

[root@fedora30 ~]# mount.nfs.old nfs:/export /mnt/t
[root@fedora30 ~]# mount.nfs.old nfs:/export /mnt/t
[root@fedora30 ~]# grep /mnt/t /proc/mounts
nfs:/export /mnt/t nfs rw,seclabel,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5,clientaddr=192.168.122.239,local_lock=none,addr=192.168.122.3 0 0

-Scott

> 
> Thanks,
> Anna
> 
> > 
> > Changes since v5:
> > - fixed possible derefence of error pointer in nfs4_validate_fspath()
> >   reported by Dan Carpenter
> > - rebased on top of v5.5-rc1
> > Changes since v4:
> > - further split the original "NFS: Add fs_context support" patch (new
> >   patch is about 25% smaller than the v4 patch)
> > - fixed NFSv4 referral mounts (broken in the original patch)
> > - fixed leak of nfs_fattr when fs_context is freed
> > Changes since v3:
> > - changed license and copyright text in fs/nfs/fs_context.c
> > Changes since v2:
> > - fixed the conversion of the nconnect= option
> > - added '#if IS_ENABLED(CONFIG_NFS_V4)' around nfs4_parse_monolithic()
> >   to avoid unused-function warning when compiling with v4 disabled
> > Chagnes since v1:
> > - split up patch 23 into 4 separate patches
> > 
> > -Scott
> > 
> > Al Viro (15):
> >   saner calling conventions for nfs_fs_mount_common()
> >   nfs: stash server into struct nfs_mount_info
> >   nfs: lift setting mount_info from nfs4_remote{,_referral}_mount
> >   nfs: fold nfs4_remote_fs_type and nfs4_remote_referral_fs_type
> >   nfs: don't bother setting/restoring export_path around
> >     do_nfs_root_mount()
> >   nfs4: fold nfs_do_root_mount/nfs_follow_remote_path
> >   nfs: lift setting mount_info from nfs_xdev_mount()
> >   nfs: stash nfs_subversion reference into nfs_mount_info
> >   nfs: don't bother passing nfs_subversion to ->try_mount() and
> >     nfs_fs_mount_common()
> >   nfs: merge xdev and remote file_system_type
> >   nfs: unexport nfs_fs_mount_common()
> >   nfs: don't pass nfs_subversion to ->create_server()
> >   nfs: get rid of mount_info ->fill_super()
> >   nfs_clone_sb_security(): simplify the check for server bogosity
> >   nfs: get rid of ->set_security()
> > 
> > David Howells (8):
> >   NFS: Move mount parameterisation bits into their own file
> >   NFS: Constify mount argument match tables
> >   NFS: Rename struct nfs_parsed_mount_data to struct nfs_fs_context
> >   NFS: Split nfs_parse_mount_options()
> >   NFS: Deindent nfs_fs_context_parse_option()
> >   NFS: Add a small buffer in nfs_fs_context to avoid string dup
> >   NFS: Do some tidying of the parsing code
> >   NFS: Add fs_context support.
> > 
> > Scott Mayhew (4):
> >   NFS: rename nfs_fs_context pointer arg in a few functions
> >   NFS: Convert mount option parsing to use functionality from
> >     fs_parser.h
> >   NFS: Additional refactoring for fs_context conversion
> >   NFS: Attach supplementary error information to fs_context.
> > 
> >  fs/nfs/Makefile         |    2 +-
> >  fs/nfs/client.c         |   80 +-
> >  fs/nfs/fs_context.c     | 1424 +++++++++++++++++++++++++
> >  fs/nfs/fscache.c        |    2 +-
> >  fs/nfs/getroot.c        |   73 +-
> >  fs/nfs/internal.h       |  132 +--
> >  fs/nfs/namespace.c      |  146 ++-
> >  fs/nfs/nfs3_fs.h        |    2 +-
> >  fs/nfs/nfs3client.c     |    6 +-
> >  fs/nfs/nfs3proc.c       |    2 +-
> >  fs/nfs/nfs4_fs.h        |    9 +-
> >  fs/nfs/nfs4client.c     |   99 +-
> >  fs/nfs/nfs4file.c       |    1 +
> >  fs/nfs/nfs4namespace.c  |  292 +++---
> >  fs/nfs/nfs4proc.c       |    2 +-
> >  fs/nfs/nfs4super.c      |  257 ++---
> >  fs/nfs/proc.c           |    2 +-
> >  fs/nfs/super.c          | 2217 +++++----------------------------------
> >  include/linux/nfs_xdr.h |    9 +-
> >  19 files changed, 2287 insertions(+), 2470 deletions(-)
> >  create mode 100644 fs/nfs/fs_context.c
> >