linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] NFS: Add sequence_priviliged_ops for nfs4_proc_sequence()
@ 2012-11-12 18:35 bjschuma
  2012-11-12 18:35 ` [PATCH 2/2] NFS: Don't set RPC_TASK_ASYNC " bjschuma
  2012-11-12 20:22 ` [PATCH 1/2] NFS: Add sequence_priviliged_ops " Andy Adamson
  0 siblings, 2 replies; 17+ messages in thread
From: bjschuma @ 2012-11-12 18:35 UTC (permalink / raw)
  To: Trond.Myklebust; +Cc: linux-nfs

From: Bryan Schumaker <bjschuma@netapp.com>

During recovery the NFS4_SESSION_DRAINING flag might be set on the
client structure.  This can cause lease renewal to abort when
nfs41_setup_sequence sees that we are doing recovery.  As a result, the
client never recovers and all activity with the NFS server halts.

Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
---
 fs/nfs/nfs4proc.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 5eec442..537181c 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -6138,13 +6138,26 @@ static void nfs41_sequence_prepare(struct rpc_task *task, void *data)
 	rpc_call_start(task);
 }
 
+static void nfs41_sequence_prepare_privileged(struct rpc_task *task, void *data)
+{
+	rpc_task_set_priority(task, RPC_PRIORITY_PRIVILEGED);
+	nfs41_sequence_prepare(task, data);
+}
+
 static const struct rpc_call_ops nfs41_sequence_ops = {
 	.rpc_call_done = nfs41_sequence_call_done,
 	.rpc_call_prepare = nfs41_sequence_prepare,
 	.rpc_release = nfs41_sequence_release,
 };
 
-static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
+static const struct rpc_call_ops nfs41_sequence_privileged_ops = {
+	.rpc_call_done = nfs41_sequence_call_done,
+	.rpc_call_prepare = nfs41_sequence_prepare_privileged,
+	.rpc_release = nfs41_sequence_release,
+};
+
+static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred,
+					     const struct rpc_call_ops *seq_ops)
 {
 	struct nfs4_sequence_data *calldata;
 	struct rpc_message msg = {
@@ -6154,7 +6167,7 @@ static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp, struct rpc_
 	struct rpc_task_setup task_setup_data = {
 		.rpc_client = clp->cl_rpcclient,
 		.rpc_message = &msg,
-		.callback_ops = &nfs41_sequence_ops,
+		.callback_ops = seq_ops,
 		.flags = RPC_TASK_ASYNC | RPC_TASK_SOFT,
 	};
 
@@ -6181,7 +6194,7 @@ static int nfs41_proc_async_sequence(struct nfs_client *clp, struct rpc_cred *cr
 
 	if ((renew_flags & NFS4_RENEW_TIMEOUT) == 0)
 		return 0;
-	task = _nfs41_proc_sequence(clp, cred);
+	task = _nfs41_proc_sequence(clp, cred, &nfs41_sequence_ops);
 	if (IS_ERR(task))
 		ret = PTR_ERR(task);
 	else
@@ -6195,7 +6208,7 @@ static int nfs4_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
 	struct rpc_task *task;
 	int ret;
 
-	task = _nfs41_proc_sequence(clp, cred);
+	task = _nfs41_proc_sequence(clp, cred, &nfs41_sequence_privileged_ops);
 	if (IS_ERR(task)) {
 		ret = PTR_ERR(task);
 		goto out;
-- 
1.8.0


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

end of thread, other threads:[~2012-11-13 14:47 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-12 18:35 [PATCH 1/2] NFS: Add sequence_priviliged_ops for nfs4_proc_sequence() bjschuma
2012-11-12 18:35 ` [PATCH 2/2] NFS: Don't set RPC_TASK_ASYNC " bjschuma
2012-11-12 20:22 ` [PATCH 1/2] NFS: Add sequence_priviliged_ops " Andy Adamson
2012-11-12 20:27   ` Bryan Schumaker
2012-11-12 20:29   ` Myklebust, Trond
2012-11-12 20:49     ` Andy Adamson
2012-11-12 20:51       ` Bryan Schumaker
2012-11-12 21:08         ` Andy Adamson
2012-11-12 21:24           ` Myklebust, Trond
2012-11-12 20:54       ` Myklebust, Trond
2012-11-12 21:02         ` Bryan Schumaker
2012-11-12 21:10           ` Myklebust, Trond
2012-11-12 21:26             ` Bryan Schumaker
2012-11-12 21:37               ` Myklebust, Trond
2012-11-12 21:41                 ` Bryan Schumaker
2012-11-12 21:44                   ` Myklebust, Trond
2012-11-13 14:47                 ` Bryan Schumaker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).