diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-09-11 21:42:40 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-10-01 17:40:00 -0400 |
commit | 1377b69e68241826761d257ac26dd4285c3f9e9b (patch) | |
tree | 0963f1708ea80db16c589712639d1bd99f45ae94 /fs/nfsd | |
parent | e1ff371f9da57c1965400b9cc6607705d76a67bd (diff) |
nfsd4: minor free_session cleanup
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4state.c | 19 |
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 | ||
900 | static 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 | |||
900 | static void free_session(struct kref *kref) | 907 | static 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 | ||
916 | void nfsd4_put_session(struct nfsd4_session *ses) | 917 | void 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); |