mbox series

[v6,0/3] convert write_threads, write_version and write_ports to netlink commands

Message ID cover.1705771400.git.lorenzo@kernel.org (mailing list archive)
Headers show
Series convert write_threads, write_version and write_ports to netlink commands | expand

Message

Lorenzo Bianconi Jan. 20, 2024, 5:33 p.m. UTC
Introduce write_threads, write_version and write_ports netlink
commands similar to the ones available through the procfs.

Changes since v5:
- for write_ports and write_version commands, userspace is expected to provide
  a NFS listeners/supported versions list it want to enable (all the other
  ports/versions will be disabled).
- fix comments
- rebase on top of nfsd-next
Changes since v4:
- rebase on top of nfsd-next tree
Changes since v3:
- drop write_maxconn and write_maxblksize for the moment
- add write_version and write_ports commands
Changes since v2:
- use u32 to store nthreads in nfsd_nl_threads_set_doit
- rename server-attr in control-plane in nfsd.yaml specs
Changes since v1:
- remove write_v4_end_grace command
- add write_maxblksize and write_maxconn netlink commands

This patch can be tested with user-space tool reported below:
https://github.com/LorenzoBianconi/nfsd-netlink.git

Lorenzo Bianconi (3):
  NFSD: convert write_threads to netlink command
  NFSD: add write_version to netlink command
  NFSD: add write_ports to netlink command

 Documentation/netlink/specs/nfsd.yaml |  94 ++++++
 fs/nfsd/netlink.c                     |  63 ++++
 fs/nfsd/netlink.h                     |  10 +
 fs/nfsd/nfsctl.c                      | 396 ++++++++++++++++++++++
 include/uapi/linux/nfsd_netlink.h     |  44 +++
 tools/net/ynl/generated/nfsd-user.c   | 460 ++++++++++++++++++++++++++
 tools/net/ynl/generated/nfsd-user.h   | 155 +++++++++
 7 files changed, 1222 insertions(+)

Comments

Jeff Layton Jan. 22, 2024, 1:49 p.m. UTC | #1
On Sat, 2024-01-20 at 18:33 +0100, Lorenzo Bianconi wrote:
> Introduce write_threads, write_version and write_ports netlink
> commands similar to the ones available through the procfs.
> 
> Changes since v5:
> - for write_ports and write_version commands, userspace is expected to provide
>   a NFS listeners/supported versions list it want to enable (all the other
>   ports/versions will be disabled).
> - fix comments
> - rebase on top of nfsd-next
> Changes since v4:
> - rebase on top of nfsd-next tree
> Changes since v3:
> - drop write_maxconn and write_maxblksize for the moment
> - add write_version and write_ports commands
> Changes since v2:
> - use u32 to store nthreads in nfsd_nl_threads_set_doit
> - rename server-attr in control-plane in nfsd.yaml specs
> Changes since v1:
> - remove write_v4_end_grace command
> - add write_maxblksize and write_maxconn netlink commands
> 
> This patch can be tested with user-space tool reported below:
> https://github.com/LorenzoBianconi/nfsd-netlink.git
> 
> Lorenzo Bianconi (3):
>   NFSD: convert write_threads to netlink command
>   NFSD: add write_version to netlink command
>   NFSD: add write_ports to netlink command
> 
>  Documentation/netlink/specs/nfsd.yaml |  94 ++++++
>  fs/nfsd/netlink.c                     |  63 ++++
>  fs/nfsd/netlink.h                     |  10 +
>  fs/nfsd/nfsctl.c                      | 396 ++++++++++++++++++++++
>  include/uapi/linux/nfsd_netlink.h     |  44 +++
>  tools/net/ynl/generated/nfsd-user.c   | 460 ++++++++++++++++++++++++++
>  tools/net/ynl/generated/nfsd-user.h   | 155 +++++++++
>  7 files changed, 1222 insertions(+)
> 


I think this is really close and coming together! Before we merge this
though, I'd _really_ like to see some patches for rpc.nfsd in nfs-utils.
Until we try to implement the userland bits, we won't know if we've
gotten this interface right.

...and before that, we really need to have some sort of userland program
packaged and available for querying the new netlink RPC stats from nfsd.
You have the simple userland one on github, but I think we need omething
packaged, ideally as part of nfs-utils.

Doing that first would allow you to add the necessary autoconf/libtool
stuff to pull in the netlink libraries, which will be a prerequisite for
doing the userland rpc.nfsd work, and will probably be a bit simpler
than modifying rpc.nfsd.
Lorenzo Bianconi Jan. 22, 2024, 5:01 p.m. UTC | #2
> On Sat, 2024-01-20 at 18:33 +0100, Lorenzo Bianconi wrote:
> > Introduce write_threads, write_version and write_ports netlink
> > commands similar to the ones available through the procfs.
> > 
> > Changes since v5:
> > - for write_ports and write_version commands, userspace is expected to provide
> >   a NFS listeners/supported versions list it want to enable (all the other
> >   ports/versions will be disabled).
> > - fix comments
> > - rebase on top of nfsd-next
> > Changes since v4:
> > - rebase on top of nfsd-next tree
> > Changes since v3:
> > - drop write_maxconn and write_maxblksize for the moment
> > - add write_version and write_ports commands
> > Changes since v2:
> > - use u32 to store nthreads in nfsd_nl_threads_set_doit
> > - rename server-attr in control-plane in nfsd.yaml specs
> > Changes since v1:
> > - remove write_v4_end_grace command
> > - add write_maxblksize and write_maxconn netlink commands
> > 
> > This patch can be tested with user-space tool reported below:
> > https://github.com/LorenzoBianconi/nfsd-netlink.git
> > 
> > Lorenzo Bianconi (3):
> >   NFSD: convert write_threads to netlink command
> >   NFSD: add write_version to netlink command
> >   NFSD: add write_ports to netlink command
> > 
> >  Documentation/netlink/specs/nfsd.yaml |  94 ++++++
> >  fs/nfsd/netlink.c                     |  63 ++++
> >  fs/nfsd/netlink.h                     |  10 +
> >  fs/nfsd/nfsctl.c                      | 396 ++++++++++++++++++++++
> >  include/uapi/linux/nfsd_netlink.h     |  44 +++
> >  tools/net/ynl/generated/nfsd-user.c   | 460 ++++++++++++++++++++++++++
> >  tools/net/ynl/generated/nfsd-user.h   | 155 +++++++++
> >  7 files changed, 1222 insertions(+)
> > 
> 
> 
> I think this is really close and coming together! Before we merge this
> though, I'd _really_ like to see some patches for rpc.nfsd in nfs-utils.
> Until we try to implement the userland bits, we won't know if we've
> gotten this interface right.
> 
> ...and before that, we really need to have some sort of userland program
> packaged and available for querying the new netlink RPC stats from nfsd.
> You have the simple userland one on github, but I think we need omething
> packaged, ideally as part of nfs-utils.

Hi Jeff,

I guess we can experiment on the new APIs very easily with ynl cli.py.
Something like:

$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/nfsd.yaml --dump rpc-status-get
[{'compound-ops': [53, 22, 9],
 'daddr4': 3232266828,
 'dport': 2049,
 'flags': 5,
 'proc': 1,
 'prog': 100003,
 'saddr4': 3232266753,
 'service_time': 81705129,
 'sport': 908,
 'version': 4,
 'xid': 0},
{'compound-ops': [53, 22, 9],
 'daddr4': 3232266828,
 'dport': 2049,
 'flags': 5,
 'proc': 1,
 'prog': 100003,
 'saddr4': 3232266753,
 'service_time': 81700496,
 'sport': 908,
 'version': 4,
 'xid': 0}]

or 

./tools/net/ynl/cli.py --spec Documentation/netlink/specs/nfsd.yaml --do threads-get
{'threads': 8}

(the only required package is jsonschema iirc).

Regards,
Lorenzo

> 
> Doing that first would allow you to add the necessary autoconf/libtool
> stuff to pull in the netlink libraries, which will be a prerequisite for
> doing the userland rpc.nfsd work, and will probably be a bit simpler
> than modifying rpc.nfsd.
> -- 
> Jeff Layton <jlayton@kernel.org>