From: John Hughes <john@Calva.COM>
To: linux-nfs@vger.kernel.org
Cc: John Hughes <john@Calva.COM>
Subject: Re: [BUG] nfs4 client loops printing "Error: state manager encountered RPCSEC_GSS session expired" if kerberos ticket expires
Date: Mon, 14 Nov 2011 15:33:20 +0100 [thread overview]
Message-ID: <4EC126B0.204@Calva.COM> (raw)
In-Reply-To: <4EBBF7AB.8030907@Calva.COM>
[-- Attachment #1: Type: text/plain, Size: 631 bytes --]
Here is a ridiculously stupid patch that fixes the behaviour to be
closer to what I want.
Now, if the krb5 ticket has expired processes get a EKEYEXPIRED error
and the kernel doesn't waste its time printing "ticket expired" errors.
From the point of view of someone who has their home directory nfs
mounted they go home after work, when they get back in the morning they
give their password to the screensaver, pam_krb5 gets a new ticket and
everything works.
(Without this hack the screensaver hangs before presenting the password
prompt, presumably accessing something in the home directory).
Anyone care to comment?
[-- Attachment #2: nfs4-hack.patch --]
[-- Type: text/x-patch, Size: 1366 bytes --]
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 4700fae..3101f84 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -302,7 +302,9 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc
}
case -NFS4ERR_GRACE:
case -NFS4ERR_DELAY:
+#if 0 /* JH hack - don't handle KRB5 ticket expiry */
case -EKEYEXPIRED:
+#endif
ret = nfs4_delay(server->client, &exception->timeout);
if (ret != 0)
break;
@@ -3732,7 +3734,9 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,
case -NFS4ERR_DELAY:
nfs_inc_server_stats(server, NFSIOS_DELAY);
case -NFS4ERR_GRACE:
+#if 0 /* JH hack - don't handle KRB5 ticket expiry */
case -EKEYEXPIRED:
+#endif
rpc_delay(task, NFS4_POLL_RETRY_MAX);
task->tk_status = 0;
return -EAGAIN;
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 39914be..0137ec9 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -1376,10 +1376,12 @@ static int nfs4_recovery_handle_error(struct nfs_client *clp, int error)
set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state);
/* Zero session reset errors */
return 0;
+#if 0 /* JH hack: If there is nothing to do, do nothing */
case -EKEYEXPIRED:
/* Nothing we can do */
nfs4_warn_keyexpired(clp->cl_hostname);
return 0;
+#endif
}
return error;
}
next prev parent reply other threads:[~2011-11-14 14:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-10 16:11 [BUG] nfs4 client loops printing "Error: state manager encountered RPCSEC_GSS session expired" if kerberos ticket expires John Hughes
2011-11-14 14:33 ` John Hughes [this message]
2011-11-16 10:42 ` John Hughes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EC126B0.204@Calva.COM \
--to=john@calva.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox