diff options
author | OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> | 2011-04-18 11:48:55 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2011-04-19 17:31:13 -0400 |
commit | a96e5b90804be8b540d30f4a1453fc87f95b3149 (patch) | |
tree | 16504bb1b02626001ef0ef84991e87d0c95e1061 /fs | |
parent | 4ee63624fd927376b97ead3a8d00728d437bc8e8 (diff) |
nfsd4: Fix filp leak
23fcf2ec93fb8573a653408316af599939ff9a8e (nfsd4: fix oops on lock failure)
The above patch breaks free path for stp->st_file. If stp was inserted
into sop->so_stateids, we have to free stp->st_file refcount. Because
stp->st_file refcount itself is taken whether or not any refcounts are
taken on the stp->st_file->fi_fds[].
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Cc: stable@kernel.org
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/nfs4state.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index c79a98319e4a..4cf04e11c66c 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -403,8 +403,8 @@ static void free_generic_stateid(struct nfs4_stateid *stp) | |||
403 | if (stp->st_access_bmap) { | 403 | if (stp->st_access_bmap) { |
404 | oflag = nfs4_access_bmap_to_omode(stp); | 404 | oflag = nfs4_access_bmap_to_omode(stp); |
405 | nfs4_file_put_access(stp->st_file, oflag); | 405 | nfs4_file_put_access(stp->st_file, oflag); |
406 | put_nfs4_file(stp->st_file); | ||
407 | } | 406 | } |
407 | put_nfs4_file(stp->st_file); | ||
408 | kmem_cache_free(stateid_slab, stp); | 408 | kmem_cache_free(stateid_slab, stp); |
409 | } | 409 | } |
410 | 410 | ||