* [PATCH] nfsd41: Do not renew state on error
@ 2009-06-20 3:08 Ricardo Labiaga
2009-06-21 14:27 ` [pnfs] " Benny Halevy
0 siblings, 1 reply; 2+ messages in thread
From: Ricardo Labiaga @ 2009-06-20 3:08 UTC (permalink / raw)
To: bfields, bhalevy-C4P08NqkoRlAfugRpC6u6w; +Cc: linux-nfs, pnfs, Ricardo Labiaga
nfsd4_sequence() should not renew the client state if the session was not
found or if there was a bad slot. This will also avoid dereferencing a
null session pointer.
Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@netapp.com>
---
fs/nfsd/nfs4state.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index c845365..e239c6e 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1425,12 +1425,16 @@ nfsd4_sequence(struct svc_rqst *rqstp,
spin_lock(&sessionid_lock);
status = nfserr_badsession;
session = find_in_sessionid_hashtbl(&seq->sessionid);
- if (!session)
- goto out;
+ if (!session) {
+ spin_unlock(&sessionid_lock);
+ goto err;
+ }
status = nfserr_badslot;
- if (seq->slotid >= session->se_fchannel.maxreqs)
- goto out;
+ if (seq->slotid >= session->se_fchannel.maxreqs) {
+ spin_unlock(&sessionid_lock);
+ goto err;
+ }
slot = &session->se_slots[seq->slotid];
dprintk("%s: slotid %d\n", __func__, seq->slotid);
--
1.5.4.3
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [pnfs] [PATCH] nfsd41: Do not renew state on error
2009-06-20 3:08 [PATCH] nfsd41: Do not renew state on error Ricardo Labiaga
@ 2009-06-21 14:27 ` Benny Halevy
0 siblings, 0 replies; 2+ messages in thread
From: Benny Halevy @ 2009-06-21 14:27 UTC (permalink / raw)
To: Ricardo Labiaga; +Cc: bfields, bhalevy-C4P08NqkoRlAfugRpC6u6w, linux-nfs, pnfs
On Jun. 20, 2009, 6:08 +0300, Ricardo Labiaga <Ricardo.Labiaga@netapp.com> wrote:
> nfsd4_sequence() should not renew the client state if the session was not
> found or if there was a bad slot. This will also avoid dereferencing a
> null session pointer.
Thanks. I'll merge that onto my nfsd41-for-2.6.31 branch.
I was thinking whether the spin_unlock should be done on
the err: label and separate it from the success path.
I'll look into that along with reworking the state lock
as renewing the client (or actually marking it for renew)
will no longer need the lock.
Benny
>
> Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@netapp.com>
> ---
> fs/nfsd/nfs4state.c | 12 ++++++++----
> 1 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index c845365..e239c6e 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -1425,12 +1425,16 @@ nfsd4_sequence(struct svc_rqst *rqstp,
> spin_lock(&sessionid_lock);
> status = nfserr_badsession;
> session = find_in_sessionid_hashtbl(&seq->sessionid);
> - if (!session)
> - goto out;
> + if (!session) {
> + spin_unlock(&sessionid_lock);
> + goto err;
> + }
>
> status = nfserr_badslot;
> - if (seq->slotid >= session->se_fchannel.maxreqs)
> - goto out;
> + if (seq->slotid >= session->se_fchannel.maxreqs) {
> + spin_unlock(&sessionid_lock);
> + goto err;
> + }
>
> slot = &session->se_slots[seq->slotid];
> dprintk("%s: slotid %d\n", __func__, seq->slotid);
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-06-21 14:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-20 3:08 [PATCH] nfsd41: Do not renew state on error Ricardo Labiaga
2009-06-21 14:27 ` [pnfs] " Benny Halevy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox