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: Anna Schumaker <anna.schumaker@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Anna Schumaker
2025-11-04 10:06:45 -05:00
committed by Trond Myklebust
parent 669c0580ac
commit b6d2a520f4
3 changed files with 11 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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))

View File

@@ -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))