aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2012-09-11 21:42:40 -0400
committerJ. Bruce Fields <bfields@redhat.com>2012-10-01 17:40:00 -0400
commit1377b69e68241826761d257ac26dd4285c3f9e9b (patch)
tree0963f1708ea80db16c589712639d1bd99f45ae94 /fs/nfsd/nfs4state.c
parente1ff371f9da57c1965400b9cc6607705d76a67bd (diff)
nfsd4: minor free_session cleanup
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 8b7f8f84d5a4..7536a88063a5 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -897,20 +897,21 @@ static void nfsd4_del_conns(struct nfsd4_session *s)
897 spin_unlock(&clp->cl_lock); 897 spin_unlock(&clp->cl_lock);
898} 898}
899 899
900static void __free_session(struct nfsd4_session *ses)
901{
902 nfsd4_put_drc_mem(slot_bytes(&ses->se_fchannel), ses->se_fchannel.maxreqs);
903 free_session_slots(ses);
904 kfree(ses);
905}
906
900static void free_session(struct kref *kref) 907static void free_session(struct kref *kref)
901{ 908{
902 struct nfsd4_session *ses; 909 struct nfsd4_session *ses;
903 int mem;
904 910
905 lockdep_assert_held(&client_lock); 911 lockdep_assert_held(&client_lock);
906 ses = container_of(kref, struct nfsd4_session, se_ref); 912 ses = container_of(kref, struct nfsd4_session, se_ref);
907 nfsd4_del_conns(ses); 913 nfsd4_del_conns(ses);
908 spin_lock(&nfsd_drc_lock); 914 __free_session(ses);
909 mem = ses->se_fchannel.maxreqs * slot_bytes(&ses->se_fchannel);
910 nfsd_drc_mem_used -= mem;
911 spin_unlock(&nfsd_drc_lock);
912 free_session_slots(ses);
913 kfree(ses);
914} 915}
915 916
916void nfsd4_put_session(struct nfsd4_session *ses) 917void nfsd4_put_session(struct nfsd4_session *ses)
@@ -966,9 +967,7 @@ static struct nfsd4_session *alloc_init_session(struct svc_rqst *rqstp, struct n
966 967
967 conn = alloc_conn_from_crses(rqstp, cses); 968 conn = alloc_conn_from_crses(rqstp, cses);
968 if (!conn) { 969 if (!conn) {
969 spin_lock(&client_lock); 970 __free_session(new);
970 free_session(&new->se_ref);
971 spin_unlock(&client_lock);
972 return NULL; 971 return NULL;
973 } 972 }
974 nfsd4_init_conn(rqstp, conn, new); 973 nfsd4_init_conn(rqstp, conn, new);