Commit b6d2a520 authored by Anna Schumaker's avatar Anna Schumaker Committed by Trond Myklebust
Browse files

NFS: Add a module option to disable directory delegations



When this option is disabled then the client will not request directory
delegations or check if we have one during the revalidation paths.

Signed-off-by: default avatarAnna Schumaker <anna.schumaker@oracle.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 669c0580
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@
static unsigned nfs_delegation_watermark = NFS_DEFAULT_DELEGATION_WATERMARK;
module_param_named(delegation_watermark, nfs_delegation_watermark, uint, 0644);

bool directory_delegations = true;
module_param(directory_delegations, bool, 0644);
MODULE_PARM_DESC(directory_delegations,
		 "Enable the use of directory delegations, defaults to on.");

static struct hlist_head *nfs_delegation_hash(struct nfs_server *server,
		const struct nfs_fh *fhandle)
{
@@ -143,6 +148,8 @@ static int nfs4_do_check_delegation(struct inode *inode, fmode_t type,
 */
int nfs4_have_delegation(struct inode *inode, fmode_t type, int flags)
{
	if (S_ISDIR(inode->i_mode) && !directory_delegations)
		nfs_inode_evict_delegation(inode);
	return nfs4_do_check_delegation(inode, type, flags, true);
}

+2 −0
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ static inline int nfs_have_delegated_mtime(struct inode *inode)
						 NFS_DELEGATION_FLAG_TIME);
}

extern bool directory_delegations;

static inline void nfs_request_directory_delegation(struct inode *inode)
{
	if (S_ISDIR(inode->i_mode))
+2 −0
Original line number Diff line number Diff line
@@ -4473,6 +4473,8 @@ static int nfs4_get_referral(struct rpc_clnt *client, struct inode *dir,
#if IS_ENABLED(CONFIG_NFS_V4_1)
static bool should_request_dir_deleg(struct inode *inode)
{
	if (!directory_delegations)
		return false;
	if (!inode)
		return false;
	if (!S_ISDIR(inode->i_mode))