diff mbox series

nfsd: don't set SVC_SOCK_ANONYMOUS when creating nfsd sockets

Message ID 20240719-nfsd-next-v1-1-b6a9a899a908@kernel.org (mailing list archive)
State New
Headers show
Series nfsd: don't set SVC_SOCK_ANONYMOUS when creating nfsd sockets | expand

Commit Message

Jeff Layton July 19, 2024, 6:55 p.m. UTC
When creating nfsd sockets via the netlink interface, we do want to
register with the portmapper. Don't set SVC_SOCK_ANONYMOUS.

Fixes: 16a471177496 NFSD: add listener-{set,get} netlink command
Reported-by: Steve Dickson <steved@redhat.com>
Cc: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 fs/nfsd/nfsctl.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)


---
base-commit: 769d20028f45a4f442cfe558a32faba357a7f5e2
change-id: 20240719-nfsd-next-d9582a2c50c2

Best regards,

Comments

Chuck Lever July 19, 2024, 7:03 p.m. UTC | #1
On Fri, Jul 19, 2024 at 02:55:53PM -0400, Jeff Layton wrote:
> When creating nfsd sockets via the netlink interface, we do want to
> register with the portmapper. Don't set SVC_SOCK_ANONYMOUS.

NFSD's RDMA transports don't register with rpcbind, for example.


> Fixes: 16a471177496 NFSD: add listener-{set,get} netlink command
> Reported-by: Steve Dickson <steved@redhat.com>
> Cc: Lorenzo Bianconi <lorenzo@kernel.org>
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
>  fs/nfsd/nfsctl.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> index 9e0ea6fc2aa3..34eb2c2cbcde 100644
> --- a/fs/nfsd/nfsctl.c
> +++ b/fs/nfsd/nfsctl.c
> @@ -2069,8 +2069,7 @@ int nfsd_nl_listener_set_doit(struct sk_buff *skb, struct genl_info *info)
>  			continue;
>  		}
>  
> -		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa,
> -					      SVC_SOCK_ANONYMOUS,
> +		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa, 0,
>  					      get_current_cred());
>  		/* always save the latest error */
>  		if (ret < 0)
> 
> ---
> base-commit: 769d20028f45a4f442cfe558a32faba357a7f5e2
> change-id: 20240719-nfsd-next-d9582a2c50c2
> 
> Best regards,
> -- 
> Jeff Layton <jlayton@kernel.org>
>
NeilBrown July 21, 2024, 11:25 p.m. UTC | #2
On Sat, 20 Jul 2024, Chuck Lever wrote:
> On Fri, Jul 19, 2024 at 02:55:53PM -0400, Jeff Layton wrote:
> > When creating nfsd sockets via the netlink interface, we do want to
> > register with the portmapper. Don't set SVC_SOCK_ANONYMOUS.
> 
> NFSD's RDMA transports don't register with rpcbind, for example.

For RDMA, what does inet->sk_family and in->sk_protocol contain in
svc_setup_socket()? 

Could that code detect that it doesn't make sense to register the socket
with rpcbind?

NeilBrown
Jeff Layton July 22, 2024, 12:32 p.m. UTC | #3
On Fri, 2024-07-19 at 15:03 -0400, Chuck Lever wrote:
> On Fri, Jul 19, 2024 at 02:55:53PM -0400, Jeff Layton wrote:
> > When creating nfsd sockets via the netlink interface, we do want to
> > register with the portmapper. Don't set SVC_SOCK_ANONYMOUS.
> 
> NFSD's RDMA transports don't register with rpcbind, for example.
> 

They still aren't registered with this patch either. After doing
nfsdctl autostart:

[kdevops@kdevops-nfsd ~]$ rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  42104  status
    100024    1   tcp  40159  status
    100003    3   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100021    1   udp  46387  nlockmgr
    100021    3   udp  46387  nlockmgr
    100021    4   udp  46387  nlockmgr
    100021    1   tcp  36565  nlockmgr
    100021    3   tcp  36565  nlockmgr
    100021    4   tcp  36565  nlockmgr

I don't see a need to do anything else here.

> 
> > Fixes: 16a471177496 NFSD: add listener-{set,get} netlink command
> > Reported-by: Steve Dickson <steved@redhat.com>
> > Cc: Lorenzo Bianconi <lorenzo@kernel.org>
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> >  fs/nfsd/nfsctl.c | 3 +--
> >  1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> > index 9e0ea6fc2aa3..34eb2c2cbcde 100644
> > --- a/fs/nfsd/nfsctl.c
> > +++ b/fs/nfsd/nfsctl.c
> > @@ -2069,8 +2069,7 @@ int nfsd_nl_listener_set_doit(struct sk_buff *skb, struct genl_info *info)
> >  			continue;
> >  		}
> >  
> > -		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa,
> > -					      SVC_SOCK_ANONYMOUS,
> > +		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa, 0,
> >  					      get_current_cred());
> >  		/* always save the latest error */
> >  		if (ret < 0)
> > 
> > ---
> > base-commit: 769d20028f45a4f442cfe558a32faba357a7f5e2
> > change-id: 20240719-nfsd-next-d9582a2c50c2
> > 
> > Best regards,
> > -- 
> > Jeff Layton <jlayton@kernel.org>
> > 
>
Chuck Lever July 22, 2024, 1:51 p.m. UTC | #4
On Mon, Jul 22, 2024 at 08:32:39AM -0400, Jeff Layton wrote:
> On Fri, 2024-07-19 at 15:03 -0400, Chuck Lever wrote:
> > On Fri, Jul 19, 2024 at 02:55:53PM -0400, Jeff Layton wrote:
> > > When creating nfsd sockets via the netlink interface, we do want to
> > > register with the portmapper. Don't set SVC_SOCK_ANONYMOUS.
> > 
> > NFSD's RDMA transports don't register with rpcbind, for example.
> > 
> 
> They still aren't registered with this patch either. After doing
> nfsdctl autostart:
> 
> [kdevops@kdevops-nfsd ~]$ rpcinfo -p
>    program vers proto   port  service
>     100000    4   tcp    111  portmapper
>     100000    3   tcp    111  portmapper
>     100000    2   tcp    111  portmapper
>     100000    4   udp    111  portmapper
>     100000    3   udp    111  portmapper
>     100000    2   udp    111  portmapper
>     100024    1   udp  42104  status
>     100024    1   tcp  40159  status
>     100003    3   udp   2049  nfs
>     100227    3   udp   2049  nfs_acl
>     100003    3   tcp   2049  nfs
>     100003    4   tcp   2049  nfs
>     100227    3   tcp   2049  nfs_acl
>     100021    1   udp  46387  nlockmgr
>     100021    3   udp  46387  nlockmgr
>     100021    4   udp  46387  nlockmgr
>     100021    1   tcp  36565  nlockmgr
>     100021    3   tcp  36565  nlockmgr
>     100021    4   tcp  36565  nlockmgr
> 
> I don't see a need to do anything else here.

Fair enough. Applied to nfsd-fixes (for v6.11-rc).

Not registering RDMA transports with rpcbind was done to mimic
Solaris behavior, IIRC. I don't remember any functional reason not
to register them.


> > > Fixes: 16a471177496 NFSD: add listener-{set,get} netlink command
> > > Reported-by: Steve Dickson <steved@redhat.com>
> > > Cc: Lorenzo Bianconi <lorenzo@kernel.org>
> > > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > > ---
> > >  fs/nfsd/nfsctl.c | 3 +--
> > >  1 file changed, 1 insertion(+), 2 deletions(-)
> > > 
> > > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> > > index 9e0ea6fc2aa3..34eb2c2cbcde 100644
> > > --- a/fs/nfsd/nfsctl.c
> > > +++ b/fs/nfsd/nfsctl.c
> > > @@ -2069,8 +2069,7 @@ int nfsd_nl_listener_set_doit(struct sk_buff *skb, struct genl_info *info)
> > >  			continue;
> > >  		}
> > >  
> > > -		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa,
> > > -					      SVC_SOCK_ANONYMOUS,
> > > +		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa, 0,
> > >  					      get_current_cred());
> > >  		/* always save the latest error */
> > >  		if (ret < 0)
> > > 
> > > ---
> > > base-commit: 769d20028f45a4f442cfe558a32faba357a7f5e2
> > > change-id: 20240719-nfsd-next-d9582a2c50c2
> > > 
> > > Best regards,
> > > -- 
> > > Jeff Layton <jlayton@kernel.org>
> > > 
> > 
> 
> -- 
> Jeff Layton <jlayton@kernel.org>
diff mbox series

Patch

diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index 9e0ea6fc2aa3..34eb2c2cbcde 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -2069,8 +2069,7 @@  int nfsd_nl_listener_set_doit(struct sk_buff *skb, struct genl_info *info)
 			continue;
 		}
 
-		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa,
-					      SVC_SOCK_ANONYMOUS,
+		ret = svc_xprt_create_from_sa(serv, xcl_name, net, sa, 0,
 					      get_current_cred());
 		/* always save the latest error */
 		if (ret < 0)