2022-06-01 19:41:10

by Scott Mayhew

[permalink] [raw]
Subject: [PATCH] sunrpc: set cl_max_connect when cloning an rpc_clnt

If the initial attempt at trunking detection using the krb5i auth flavor
fails with -EACCES, -NFS4ERR_CLID_INUSE, or -NFS4ERR_WRONGSEC, then the
NFS client tries again using auth_sys, cloning the rpc_clnt in the
process. If this second attempt at trunking detection succeeds, then
the resulting nfs_client->cl_rpcclient winds up having cl_max_connect=0
and subsequent attempts to add additional transport connections to the
rpc_clnt will fail with a message similar to the following being logged:

[502044.312640] SUNRPC: reached max allowed number (0) did not add
transport to server: 192.168.122.3

Signed-off-by: Scott Mayhew <[email protected]>
---
net/sunrpc/clnt.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index e2c6eca0271b..b6781ada3aa8 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -651,6 +651,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
new->cl_discrtry = clnt->cl_discrtry;
new->cl_chatty = clnt->cl_chatty;
new->cl_principal = clnt->cl_principal;
+ new->cl_max_connect = clnt->cl_max_connect;
return new;

out_err:
--
2.35.3



2022-06-06 20:11:07

by Anna Schumaker

[permalink] [raw]
Subject: Re: [PATCH] sunrpc: set cl_max_connect when cloning an rpc_clnt

Hi Scott,

On Wed, Jun 1, 2022 at 1:34 PM Scott Mayhew <[email protected]> wrote:
>
> If the initial attempt at trunking detection using the krb5i auth flavor
> fails with -EACCES, -NFS4ERR_CLID_INUSE, or -NFS4ERR_WRONGSEC, then the
> NFS client tries again using auth_sys, cloning the rpc_clnt in the
> process. If this second attempt at trunking detection succeeds, then
> the resulting nfs_client->cl_rpcclient winds up having cl_max_connect=0
> and subsequent attempts to add additional transport connections to the
> rpc_clnt will fail with a message similar to the following being logged:
>
> [502044.312640] SUNRPC: reached max allowed number (0) did not add
> transport to server: 192.168.122.3

Good catch! I was wondering if you could give me a "Fixes:" tag so it
can be backported to stable?

Thanks,
Anna

>
> Signed-off-by: Scott Mayhew <[email protected]>
> ---
> net/sunrpc/clnt.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> index e2c6eca0271b..b6781ada3aa8 100644
> --- a/net/sunrpc/clnt.c
> +++ b/net/sunrpc/clnt.c
> @@ -651,6 +651,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
> new->cl_discrtry = clnt->cl_discrtry;
> new->cl_chatty = clnt->cl_chatty;
> new->cl_principal = clnt->cl_principal;
> + new->cl_max_connect = clnt->cl_max_connect;
> return new;
>
> out_err:
> --
> 2.35.3
>

2022-06-07 13:00:50

by Scott Mayhew

[permalink] [raw]
Subject: Re: [PATCH] sunrpc: set cl_max_connect when cloning an rpc_clnt

On Mon, 06 Jun 2022, Anna Schumaker wrote:

> Hi Scott,
>
> On Wed, Jun 1, 2022 at 1:34 PM Scott Mayhew <[email protected]> wrote:
> >
> > If the initial attempt at trunking detection using the krb5i auth flavor
> > fails with -EACCES, -NFS4ERR_CLID_INUSE, or -NFS4ERR_WRONGSEC, then the
> > NFS client tries again using auth_sys, cloning the rpc_clnt in the
> > process. If this second attempt at trunking detection succeeds, then
> > the resulting nfs_client->cl_rpcclient winds up having cl_max_connect=0
> > and subsequent attempts to add additional transport connections to the
> > rpc_clnt will fail with a message similar to the following being logged:
> >
> > [502044.312640] SUNRPC: reached max allowed number (0) did not add
> > transport to server: 192.168.122.3
>
> Good catch! I was wondering if you could give me a "Fixes:" tag so it
> can be backported to stable?

Fixes: dc48e0abee24 ("SUNRPC enforce creation of no more than max_connect xprts")

>
> Thanks,
> Anna
>
> >
> > Signed-off-by: Scott Mayhew <[email protected]>
> > ---
> > net/sunrpc/clnt.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> > index e2c6eca0271b..b6781ada3aa8 100644
> > --- a/net/sunrpc/clnt.c
> > +++ b/net/sunrpc/clnt.c
> > @@ -651,6 +651,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
> > new->cl_discrtry = clnt->cl_discrtry;
> > new->cl_chatty = clnt->cl_chatty;
> > new->cl_principal = clnt->cl_principal;
> > + new->cl_max_connect = clnt->cl_max_connect;
> > return new;
> >
> > out_err:
> > --
> > 2.35.3
> >
>

2022-06-07 18:37:16

by Anna Schumaker

[permalink] [raw]
Subject: Re: [PATCH] sunrpc: set cl_max_connect when cloning an rpc_clnt

On Tue, Jun 7, 2022 at 8:53 AM Scott Mayhew <[email protected]> wrote:
>
> On Mon, 06 Jun 2022, Anna Schumaker wrote:
>
> > Hi Scott,
> >
> > On Wed, Jun 1, 2022 at 1:34 PM Scott Mayhew <[email protected]> wrote:
> > >
> > > If the initial attempt at trunking detection using the krb5i auth flavor
> > > fails with -EACCES, -NFS4ERR_CLID_INUSE, or -NFS4ERR_WRONGSEC, then the
> > > NFS client tries again using auth_sys, cloning the rpc_clnt in the
> > > process. If this second attempt at trunking detection succeeds, then
> > > the resulting nfs_client->cl_rpcclient winds up having cl_max_connect=0
> > > and subsequent attempts to add additional transport connections to the
> > > rpc_clnt will fail with a message similar to the following being logged:
> > >
> > > [502044.312640] SUNRPC: reached max allowed number (0) did not add
> > > transport to server: 192.168.122.3
> >
> > Good catch! I was wondering if you could give me a "Fixes:" tag so it
> > can be backported to stable?
>
> Fixes: dc48e0abee24 ("SUNRPC enforce creation of no more than max_connect xprts")

Thanks! Applied for a -rc pull request

>
> >
> > Thanks,
> > Anna
> >
> > >
> > > Signed-off-by: Scott Mayhew <[email protected]>
> > > ---
> > > net/sunrpc/clnt.c | 1 +
> > > 1 file changed, 1 insertion(+)
> > >
> > > diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> > > index e2c6eca0271b..b6781ada3aa8 100644
> > > --- a/net/sunrpc/clnt.c
> > > +++ b/net/sunrpc/clnt.c
> > > @@ -651,6 +651,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
> > > new->cl_discrtry = clnt->cl_discrtry;
> > > new->cl_chatty = clnt->cl_chatty;
> > > new->cl_principal = clnt->cl_principal;
> > > + new->cl_max_connect = clnt->cl_max_connect;
> > > return new;
> > >
> > > out_err:
> > > --
> > > 2.35.3
> > >
> >
>