Messages in this thread Patch in this message | | | Subject | [patch 194/198] nfsd4: fix struct file leak | From | akpm@osdl ... | Date | Tue, 12 Apr 2005 03:33:33 -0700 |
| |
From: NeilBrown <neilb@cse.unsw.edu.au>
We were failing to close on an error path, resulting in a leak of struct files which could take a v4 server down fairly quickly.... So call nfs4_close_delegation instead of just open-coding parts of it.
Simplify the cleanup on delegation failure while we're at it.
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 | 8 +++----- 1 files changed, 3 insertions(+), 5 deletions(-)
diff -puN fs/nfsd/nfs4state.c~nfsd4-fix-struct-file-leak fs/nfsd/nfs4state.c --- 25/fs/nfsd/nfs4state.c~nfsd4-fix-struct-file-leak 2005-04-12 03:21:49.583599048 -0700 +++ 25-akpm/fs/nfsd/nfs4state.c 2005-04-12 03:21:49.589598136 -0700 @@ -190,7 +190,8 @@ nfs4_close_delegation(struct nfs4_delega dp->dl_vfs_file = NULL; /* The following nfsd_close may not actually close the file, * but we want to remove the lease in any case. */ - setlease(filp, F_UNLCK, &dp->dl_flock); + if (dp->dl_flock) + setlease(filp, F_UNLCK, &dp->dl_flock); nfsd_close(filp); vfsclose++; } @@ -1673,10 +1674,7 @@ nfs4_open_delegation(struct svc_fh *fh, if ((status = setlease(stp->st_vfs_file, flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK, &flp))) { dprintk("NFSD: setlease failed [%d], no delegation\n", status); - list_del(&dp->dl_del_perfile); - list_del(&dp->dl_del_perclnt); - nfs4_put_delegation(dp); - free_delegation++; + unhash_delegation(dp); flag = NFS4_OPEN_DELEGATE_NONE; goto out; } _ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |