Commit 26a80762 authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Add a Kconfig setting to enable delegated timestamps



After three tries, we still see test failures with delegated
timestamps. Disable them by default, but leave the implementation
intact so that development can continue.

Cc: stable@vger.kernel.org # v6.14
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 87480a8c
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -172,6 +172,16 @@ config NFSD_LEGACY_CLIENT_TRACKING
	  recoverydir, or spawn a process directly using a usermodehelper
	  upcall.

	  These legacy client tracking methods have proven to be probelmatic
	  These legacy client tracking methods have proven to be problematic
	  and will be removed in the future. Say Y here if you need support
	  for them in the interim.

config NFSD_V4_DELEG_TIMESTAMPS
	bool "Support delegated timestamps"
	depends on NFSD_V4
	default n
	help
	  NFSD implements delegated timestamps according to
	  draft-ietf-nfsv4-delstid-08 "Extending the Opening of Files". This
	  is currently an experimental feature and is therefore left disabled
	  by default.
+14 −2
Original line number Diff line number Diff line
@@ -5956,11 +5956,23 @@ nfsd4_verify_setuid_write(struct nfsd4_open *open, struct nfsd_file *nf)
	return 0;
}

#ifdef CONFIG_NFSD_V4_DELEG_TIMESTAMPS
static bool nfsd4_want_deleg_timestamps(const struct nfsd4_open *open)
{
	return open->op_deleg_want & OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS;
}
#else /* CONFIG_NFSD_V4_DELEG_TIMESTAMPS */
static bool nfsd4_want_deleg_timestamps(const struct nfsd4_open *open)
{
	return false;
}
#endif /* CONFIG NFSD_V4_DELEG_TIMESTAMPS */

static struct nfs4_delegation *
nfs4_set_delegation(struct nfsd4_open *open, struct nfs4_ol_stateid *stp,
		    struct svc_fh *parent)
{
	bool deleg_ts = open->op_deleg_want & OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS;
	bool deleg_ts = nfsd4_want_deleg_timestamps(open);
	struct nfs4_client *clp = stp->st_stid.sc_client;
	struct nfs4_file *fp = stp->st_stid.sc_file;
	struct nfs4_clnt_odstate *odstate = stp->st_clnt_odstate;
@@ -6168,8 +6180,8 @@ static void
nfs4_open_delegation(struct nfsd4_open *open, struct nfs4_ol_stateid *stp,
		     struct svc_fh *currentfh)
{
	bool deleg_ts = open->op_deleg_want & OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS;
	struct nfs4_openowner *oo = openowner(stp->st_stateowner);
	bool deleg_ts = nfsd4_want_deleg_timestamps(open);
	struct nfs4_client *clp = stp->st_stid.sc_client;
	struct svc_fh *parent = NULL;
	struct nfs4_delegation *dp;