nfsd: fix crash on LOCKT on reexported NFSv3
[ Upstream commit 0bcc7ca40bd823193224e9f38bafbd8325aaf566 ] Unlike other filesystems, NFSv3 tries to use fl_file in the GETLK case. Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
0e9f449221
commit
eb04c51a43
@@ -6855,8 +6855,7 @@ out:
|
|||||||
/*
|
/*
|
||||||
* The NFSv4 spec allows a client to do a LOCKT without holding an OPEN,
|
* The NFSv4 spec allows a client to do a LOCKT without holding an OPEN,
|
||||||
* so we do a temporary open here just to get an open file to pass to
|
* so we do a temporary open here just to get an open file to pass to
|
||||||
* vfs_test_lock. (Arguably perhaps test_lock should be done with an
|
* vfs_test_lock.
|
||||||
* inode operation.)
|
|
||||||
*/
|
*/
|
||||||
static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock)
|
static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file_lock *lock)
|
||||||
{
|
{
|
||||||
@@ -6871,7 +6870,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct
|
|||||||
NFSD_MAY_READ));
|
NFSD_MAY_READ));
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
lock->fl_file = nf->nf_file;
|
||||||
err = nfserrno(vfs_test_lock(nf->nf_file, lock));
|
err = nfserrno(vfs_test_lock(nf->nf_file, lock));
|
||||||
|
lock->fl_file = NULL;
|
||||||
out:
|
out:
|
||||||
fh_unlock(fhp);
|
fh_unlock(fhp);
|
||||||
nfsd_file_put(nf);
|
nfsd_file_put(nf);
|
||||||
|
Reference in New Issue
Block a user