
From: NeilBrown <neilb@cse.unsw.edu.au>

nfsd4 could leak a stateid in a case of kmalloc failure; fix.

Signed-off-by: Andy Adamson <andros@umich.edu>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/fs/nfsd/nfs4state.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)

diff -puN fs/nfsd/nfs4state.c~nfsd4-could-leak-a-stateid-in-an-error-path fs/nfsd/nfs4state.c
--- 25/fs/nfsd/nfs4state.c~nfsd4-could-leak-a-stateid-in-an-error-path	2004-09-02 20:28:57.416963512 -0700
+++ 25-akpm/fs/nfsd/nfs4state.c	2004-09-02 20:28:57.422962600 -0700
@@ -2153,8 +2153,10 @@ nfsd4_lock(struct svc_rqst *rqstp, struc
 		if (!(lock->lk_stateowner = alloc_init_lock_stateowner(strhashval, open_sop->so_client, open_stp, lock)))
 			goto out;
 		if ((lock_stp = alloc_init_lock_stateid(lock->lk_stateowner, 
-						fp, open_stp)) == NULL)
+						fp, open_stp)) == NULL) {
+			release_stateowner(lock->lk_stateowner);
 			goto out;
+		}
 		/* bump the open seqid used to create the lock */
 		open_sop->so_seqid++;
 	} else {
_
