nfsd4: rename sessionid_lock to client_lock

In preparation to share the lock's scope to both client
and session hash tables.

Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
Benny Halevy 2010-05-12 00:12:26 +03:00 коммит произвёл J. Bruce Fields
Родитель 5d4cec2f2f
Коммит 9089f1b478
1 изменённых файлов: 14 добавлений и 12 удалений

Просмотреть файл

@ -250,6 +250,9 @@ unhash_delegation(struct nfs4_delegation *dp)
* SETCLIENTID state * SETCLIENTID state
*/ */
/* client_lock protects the session hash table */
static DEFINE_SPINLOCK(client_lock);
/* Hash tables for nfs4_clientid state */ /* Hash tables for nfs4_clientid state */
#define CLIENT_HASH_BITS 4 #define CLIENT_HASH_BITS 4
#define CLIENT_HASH_SIZE (1 << CLIENT_HASH_BITS) #define CLIENT_HASH_SIZE (1 << CLIENT_HASH_BITS)
@ -368,7 +371,6 @@ static void release_openowner(struct nfs4_stateowner *sop)
nfs4_put_stateowner(sop); nfs4_put_stateowner(sop);
} }
static DEFINE_SPINLOCK(sessionid_lock);
#define SESSION_HASH_SIZE 512 #define SESSION_HASH_SIZE 512
static struct list_head sessionid_hashtbl[SESSION_HASH_SIZE]; static struct list_head sessionid_hashtbl[SESSION_HASH_SIZE];
@ -566,10 +568,10 @@ alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp,
new->se_flags = cses->flags; new->se_flags = cses->flags;
kref_init(&new->se_ref); kref_init(&new->se_ref);
spin_lock(&sessionid_lock); spin_lock(&client_lock);
list_add(&new->se_hash, &sessionid_hashtbl[idx]); list_add(&new->se_hash, &sessionid_hashtbl[idx]);
list_add(&new->se_perclnt, &clp->cl_sessions); list_add(&new->se_perclnt, &clp->cl_sessions);
spin_unlock(&sessionid_lock); spin_unlock(&client_lock);
status = nfs_ok; status = nfs_ok;
out: out:
@ -580,7 +582,7 @@ out_free:
goto out; goto out;
} }
/* caller must hold sessionid_lock */ /* caller must hold client_lock */
static struct nfsd4_session * static struct nfsd4_session *
find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid) find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid)
{ {
@ -603,7 +605,7 @@ find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid)
return NULL; return NULL;
} }
/* caller must hold sessionid_lock */ /* caller must hold client_lock */
static void static void
unhash_session(struct nfsd4_session *ses) unhash_session(struct nfsd4_session *ses)
{ {
@ -614,9 +616,9 @@ unhash_session(struct nfsd4_session *ses)
static void static void
release_session(struct nfsd4_session *ses) release_session(struct nfsd4_session *ses)
{ {
spin_lock(&sessionid_lock); spin_lock(&client_lock);
unhash_session(ses); unhash_session(ses);
spin_unlock(&sessionid_lock); spin_unlock(&client_lock);
nfsd4_put_session(ses); nfsd4_put_session(ses);
} }
@ -1379,15 +1381,15 @@ nfsd4_destroy_session(struct svc_rqst *r,
return nfserr_not_only_op; return nfserr_not_only_op;
} }
dump_sessionid(__func__, &sessionid->sessionid); dump_sessionid(__func__, &sessionid->sessionid);
spin_lock(&sessionid_lock); spin_lock(&client_lock);
ses = find_in_sessionid_hashtbl(&sessionid->sessionid); ses = find_in_sessionid_hashtbl(&sessionid->sessionid);
if (!ses) { if (!ses) {
spin_unlock(&sessionid_lock); spin_unlock(&client_lock);
goto out; goto out;
} }
unhash_session(ses); unhash_session(ses);
spin_unlock(&sessionid_lock); spin_unlock(&client_lock);
/* wait for callbacks */ /* wait for callbacks */
nfsd4_set_callback_client(ses->se_client, NULL); nfsd4_set_callback_client(ses->se_client, NULL);
@ -1411,7 +1413,7 @@ nfsd4_sequence(struct svc_rqst *rqstp,
if (resp->opcnt != 1) if (resp->opcnt != 1)
return nfserr_sequence_pos; return nfserr_sequence_pos;
spin_lock(&sessionid_lock); spin_lock(&client_lock);
status = nfserr_badsession; status = nfserr_badsession;
session = find_in_sessionid_hashtbl(&seq->sessionid); session = find_in_sessionid_hashtbl(&seq->sessionid);
if (!session) if (!session)
@ -1454,7 +1456,7 @@ out:
/* Hold a session reference until done processing the compound. */ /* Hold a session reference until done processing the compound. */
if (cstate->session) if (cstate->session)
nfsd4_get_session(cstate->session); nfsd4_get_session(cstate->session);
spin_unlock(&sessionid_lock); spin_unlock(&client_lock);
/* Renew the clientid on success and on replay */ /* Renew the clientid on success and on replay */
if (cstate->session) { if (cstate->session) {
nfs4_lock_state(); nfs4_lock_state();