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

It is the responsibility of the code that runs in the do_recall thread to drop
the reference to the delegation.  So if we fail to run that thread, then we
need to do it ourselves here.

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 |    1 +
 1 files changed, 1 insertion(+)

diff -puN fs/nfsd/nfs4state.c~nfsd4-fix-delegation-refcount-leak fs/nfsd/nfs4state.c
--- 25/fs/nfsd/nfs4state.c~nfsd4-fix-delegation-refcount-leak	2005-03-07 23:56:02.000000000 -0800
+++ 25-akpm/fs/nfsd/nfs4state.c	2005-03-07 23:56:02.000000000 -0800
@@ -1366,6 +1366,7 @@ void nfsd_break_deleg_cb(struct file_loc
 		printk(KERN_INFO "NFSD: Callback thread failed for "
 			"for client (clientid %08x/%08x)\n",
 			clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id);
+		nfs4_put_delegation(dp);
 	}
 }
 
_