public inbox for linux-nfs@vger.kernel.org
 help / color / mirror / Atom feed
From: andros@netapp.com
To: trond.myklebust@netapp.com
Cc: linux-nfs@vger.kernel.org, Andy Adamson <andros@netapp.com>
Subject: [PATCH 11/11] nfs41: drain session cleanup
Date: Fri,  4 Dec 2009 15:25:46 -0500	[thread overview]
Message-ID: <1259958347-9031-12-git-send-email-andros@netapp.com> (raw)
In-Reply-To: <1259958347-9031-11-git-send-email-andros@netapp.com>

From: Andy Adamson <andros@netapp.com>

Do not wake up the next slot_tbl_waitq task in nfs4_free_slot because we
may be draining the slot. Either signal the state manager that the session
is drained (the state manager wakes up tasks) OR wake up the next task.

In nfs41_sequence_done, the slot dereference is only needed in the sequence
operation success case.

Signed-off-by: Andy Adamson <andros@netapp.com>
---
 fs/nfs/nfs4proc.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 8b5b5f0..263ac19 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -329,7 +329,6 @@ nfs4_free_slot(struct nfs4_slot_table *tbl, u8 free_slotid)
 		else
 			tbl->highest_used_slotid = -1;
 	}
-	rpc_wake_up_next(&tbl->slot_tbl_waitq);
 	spin_unlock(&tbl->slot_tbl_lock);
 	dprintk("%s: free_slotid %u highest_used_slotid %d\n", __func__,
 		free_slotid, tbl->highest_used_slotid);
@@ -346,14 +345,13 @@ void nfs41_sequence_free_slot(const struct nfs_client *clp,
 	}
 	tbl = &clp->cl_session->fc_slot_table;
 	if (res->sr_slotid == NFS4_MAX_SLOT_TABLE) {
-		dprintk("%s: No slot\n", __func__);
 		/* just wake up the next guy waiting since
 		 * we may have not consumed a slot after all */
-		rpc_wake_up_next(&tbl->slot_tbl_waitq);
-		return;
+		dprintk("%s: No slot\n", __func__);
+	} else {
+		nfs4_free_slot(tbl, res->sr_slotid);
+		res->sr_slotid = NFS4_MAX_SLOT_TABLE;
 	}
-	nfs4_free_slot(tbl, res->sr_slotid);
-	res->sr_slotid = NFS4_MAX_SLOT_TABLE;
 
 	/* Signal state manager thread if session is drained */
 	if (test_bit(NFS4CLNT_SESSION_DRAINING, &clp->cl_state)) {
@@ -363,6 +361,8 @@ void nfs41_sequence_free_slot(const struct nfs_client *clp,
 			complete(&clp->cl_session->complete);
 		}
 		spin_unlock(&tbl->slot_tbl_lock);
+	} else {
+		rpc_wake_up_next(&tbl->slot_tbl_waitq);
 	}
 }
 
@@ -387,10 +387,10 @@ static void nfs41_sequence_done(struct nfs_client *clp,
 	if (res->sr_slotid == NFS4_MAX_SLOT_TABLE)
 		goto out;
 
-	tbl = &clp->cl_session->fc_slot_table;
-	slot = tbl->slots + res->sr_slotid;
-
+	/* Check the SEQUENCE operation status */
 	if (res->sr_status == 0) {
+		tbl = &clp->cl_session->fc_slot_table;
+		slot = tbl->slots + res->sr_slotid;
 		/* Update the slot's sequence and clientid lease timer */
 		++slot->seq_nr;
 		timestamp = res->sr_renewal_time;
-- 
1.6.0.6


  reply	other threads:[~2009-12-04 20:26 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-04 20:25 [PATCH 0/12] Fix session reset deadlocks Version 4 andros
2009-12-04 20:25 ` [PATCH 01/11] nfs41: add create session into establish_clid andros
2009-12-04 20:25   ` [PATCH 02/11] nfs41: rename cl_state session SETUP bit to RESET andros
2009-12-04 20:25     ` [PATCH 03/11] nfs41: nfs4_get_lease_time will never session reset andros
2009-12-04 20:25       ` [PATCH 04/11] nfs41: call free slot from nfs4_restart_rpc andros
2009-12-04 20:25         ` [PATCH 05/11] nfs41: free the slot on unhandled read errors andros
2009-12-04 20:25           ` [PATCH 06/11] nfs41: fix switch in nfs4_handle_exception andros
2009-12-04 20:25             ` [PATCH 07/11] nfs41: fix switch in nfs4_recovery_handle_error andros
2009-12-04 20:25               ` [PATCH 08/11] nfs41: don't clear tk_action on success andros
2009-12-04 20:25                 ` [PATCH 09/11] nfs41: remove nfs4_recover_session andros
2009-12-04 20:25                   ` [PATCH 10/11] nfs41: nfs41: fix state manager deadlock in session reset andros
2009-12-04 20:25                     ` andros [this message]
2009-12-04 20:25                       ` [PATCH 12/12] nfs41: only state manager sets NFS4CLNT_SESSION_SETUP andros
2009-12-04 22:01 ` [PATCH 0/12] Fix session reset deadlocks Version 4 Trond Myklebust
2009-12-04 22:24   ` Trond Myklebust
2009-12-05  7:05     ` Labiaga, Ricardo
     [not found]       ` <273FE88A07F5D445824060902F70034408A1A330-hX7t0kiaRRpT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-12-05 19:03         ` William A. (Andy) Adamson
     [not found]           ` <273FE88A07F5D445824060902F70034406371449@SACMVEXC1-PRD.hq.netapp.com>
     [not found]             ` <273FE88A07F5D445824060902F70034406371449-hX7t0kiaRRpT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-12-05 20:06               ` Trond Myklebust
2009-12-05 20:04         ` Trond Myklebust
     [not found]           ` <273FE88A07F5D445824060902F7003440637144A@SACMVEXC1-PRD.hq.netapp.com>
     [not found]             ` <273FE88A07F5D445824060902F7003440637144A-hX7t0kiaRRpT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-12-05 21:12               ` Trond Myklebust
2009-12-05 21:39                 ` Labiaga, Ricardo
2009-12-05 21:42                   ` Labiaga, Ricardo
2009-12-06  0:34                     ` Trond Myklebust
2009-12-06  3:25                       ` Labiaga, Ricardo
2009-12-06  3:28                         ` Labiaga, Ricardo

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=1259958347-9031-12-git-send-email-andros@netapp.com \
    --to=andros@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=trond.myklebust@netapp.com \
    /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