All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] NFSv4: Infinite loop in lease recovery when rpc.gssd is not running.
@ 2014-02-10 21:06 Steve Dickson
  2014-02-10 21:10 ` Trond Myklebust
  0 siblings, 1 reply; 6+ messages in thread
From: Steve Dickson @ 2014-02-10 21:06 UTC (permalink / raw)
  To: Trond Myklebust; +Cc: Linux NFS Mailing list

[ Resent with Trond's correct email address ]

Commit 0ea9de0e introduce a regression in the lease recovery code.

An infinite loop is caused when nfs4_establish_lease() fails
with -EACCES. This causes nfs4_handle_reclaim_lease_error()
to sleep a bit and resets the NFS4CLNT_LEASE_EXPIRED bit.
This in turn causes nfs4_state_manager() to try and
reestablished the lease, again, again, again...

The problem is a valid RPCSEC_GSS client is being created when
rpc.gssd is not running. This is causing the RPC code to fail
with the -EACCES sending the lease reestablished off the
deep end.

Moving the gssd_running() check back into nfs4_init_client(),
stopping the RPCSEC_GSS client from being create, stops
the looping

Signed-off-by: Steve Dickson <steved@redhat.com>
---
 fs/nfs/nfs4client.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 860ad26..a60269f 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -372,7 +372,10 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp,
 	__set_bit(NFS_CS_DISCRTRY, &clp->cl_flags);
 	__set_bit(NFS_CS_NO_RETRANS_TIMEOUT, &clp->cl_flags);
 
-	error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_GSS_KRB5I);
+	error =  -EINVAL;
+	if (gssd_running(clp->cl_net))
+		error = nfs_create_rpc_client(clp, timeparms,
+				RPC_AUTH_GSS_KRB5I);
 	if (error == -EINVAL)
 		error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX);
 	if (error < 0)
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread
* [PATCH] NFSv4: Infinite loop in lease recovery when rpc.gssd is not running.
@ 2014-02-10 20:26 Steve Dickson
  0 siblings, 0 replies; 6+ messages in thread
From: Steve Dickson @ 2014-02-10 20:26 UTC (permalink / raw)
  To: Trond Myklebust; +Cc: Linux NFS Mailing list

Commit 0ea9de0e introduce a regression in the lease recovery code.

An infinite loop is caused when nfs4_establish_lease() fails
with -EACCES. This causes nfs4_handle_reclaim_lease_error()
to sleep a bit and resets the NFS4CLNT_LEASE_EXPIRED bit.
This in turn causes nfs4_state_manager() to try and
reestablished the lease, again, again, again...

The problem is a valid RPCSEC_GSS client is being created when
rpc.gssd is not running. This is causing the RPC code to fail
with the -EACCES sending the lease reestablished off the
deep end.

Moving the gssd_running() check back into nfs4_init_client(),
stopping the RPCSEC_GSS client from being create, stops
the looping

Signed-off-by: Steve Dickson <steved@redhat.com>
---
 fs/nfs/nfs4client.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 860ad26..a60269f 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -372,7 +372,10 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp,
 	__set_bit(NFS_CS_DISCRTRY, &clp->cl_flags);
 	__set_bit(NFS_CS_NO_RETRANS_TIMEOUT, &clp->cl_flags);
 
-	error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_GSS_KRB5I);
+	error =  -EINVAL;
+	if (gssd_running(clp->cl_net))
+		error = nfs_create_rpc_client(clp, timeparms,
+				RPC_AUTH_GSS_KRB5I);
 	if (error == -EINVAL)
 		error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX);
 	if (error < 0)
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-02-11 11:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-10 21:06 [PATCH] NFSv4: Infinite loop in lease recovery when rpc.gssd is not running Steve Dickson
2014-02-10 21:10 ` Trond Myklebust
2014-02-10 21:48   ` [PATCH] SUNRPC: Don't create a gss auth cache unless rpc.gssd is running Trond Myklebust
2014-02-10 23:01     ` Steve Dickson
2014-02-11 11:26       ` Steve Dickson
  -- strict thread matches above, loose matches on Subject: below --
2014-02-10 20:26 [PATCH] NFSv4: Infinite loop in lease recovery when rpc.gssd is not running Steve Dickson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.