Commit b0bf1454 authored by Olga Kornievskaia's avatar Olga Kornievskaia Committed by Chuck Lever
Browse files

nfsd: fix GET_DIR_DELEGATION when VFS leases are disabled



When leases are disabled on the server, running xfstest generic/309 leads
to an error because GET_DIR_DELEGATION returns EINVAL.

nfsd_get_dir_deleg() can fail in several ways: like memory allocation and
unable to get a lease because either leases are disable or it's already
held. Currently only the condition "already held" is translated to
returning directory-delegation-is-unavailable error. However, other failure
conditions are likely temporary and thus should result in the same kind
of error.

Fixes: 8b99f6a8 ("nfsd: wire up GET_DIR_DELEGATION handling")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarOlga Kornievskaia <okorniev@redhat.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent d644a698
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -2535,10 +2535,6 @@ nfsd4_get_dir_delegation(struct svc_rqst *rqstp,
	dd = nfsd_get_dir_deleg(cstate, gdd, nf);
	nfsd_file_put(nf);
	if (IS_ERR(dd)) {
		int err = PTR_ERR(dd);

		if (err != -EAGAIN)
			return nfserrno(err);
		gdd->gddrnf_status = GDD4_UNAVAIL;
		return nfs_ok;
	}