diff options
author | J. Bruce Fields <bfields@redhat.com> | 2013-08-15 16:55:26 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-06 15:05:49 -0800 |
commit | b4fee5b24ca8bb48fabb26ecc69cf2629564c28c (patch) | |
tree | ddbd04501823cac4023c3301c834e8987684bf34 /drivers | |
parent | bfa09bfcfb3a6f172f3c6c623e5b376f8e73fd15 (diff) | |
download | lwn-b4fee5b24ca8bb48fabb26ecc69cf2629564c28c.tar.gz lwn-b4fee5b24ca8bb48fabb26ecc69cf2629564c28c.zip |
nfsd4: fix leak of inode reference on delegation failure
commit bf7bd3e98be5c74813bee6ad496139fb0a011b3b upstream.
This fixes a regression from 68a3396178e6688ad7367202cdf0af8ed03c8727
"nfsd4: shut down more of delegation earlier".
After that commit, nfs4_set_delegation() failures result in
nfs4_put_delegation being called, but nfs4_put_delegation doesn't free
the nfs4_file that has already been set by alloc_init_deleg().
This can result in an oops on later unmounting the exported filesystem.
Note also delaying the fi_had_conflict check we're able to return a
better error (hence give 4.1 clients a better idea why the delegation
failed; though note CONFLICT isn't an exact match here, as that's
supposed to indicate a current conflict, but all we know here is that
there was one recently).
Reported-by: Toralf Förster <toralf.foerster@gmx.de>
Tested-by: Toralf Förster <toralf.foerster@gmx.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
[tuomasjjrasanen: backported to 3.10
Conflicts fs/nfsd/nfs4state.c:
Delegation type flags have been removed from upstream code. In 3.10-series,
they still exists and therefore the commit caused few conflicts in function
signatures.
]
Signed-off-by: Tuomas Räsänen <tuomasjjrasanen@opinsys.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
0 files changed, 0 insertions, 0 deletions