mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
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:
committed by
Trond Myklebust
parent
669c0580ac
commit
b6d2a520f4
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user