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 | |
| parent | e1ff371f9da57c1965400b9cc6607705d76a67bd (diff) | |
nfsd4: minor free_session cleanup
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs')
| -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); |
