mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02: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:
parent
669c0580ac
commit
b6d2a520f4
|
|
@ -30,6 +30,11 @@
|
||||||
static unsigned nfs_delegation_watermark = NFS_DEFAULT_DELEGATION_WATERMARK;
|
static unsigned nfs_delegation_watermark = NFS_DEFAULT_DELEGATION_WATERMARK;
|
||||||
module_param_named(delegation_watermark, nfs_delegation_watermark, uint, 0644);
|
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,
|
static struct hlist_head *nfs_delegation_hash(struct nfs_server *server,
|
||||||
const struct nfs_fh *fhandle)
|
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)
|
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);
|
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);
|
NFS_DELEGATION_FLAG_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool directory_delegations;
|
||||||
|
|
||||||
static inline void nfs_request_directory_delegation(struct inode *inode)
|
static inline void nfs_request_directory_delegation(struct inode *inode)
|
||||||
{
|
{
|
||||||
if (S_ISDIR(inode->i_mode))
|
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)
|
#if IS_ENABLED(CONFIG_NFS_V4_1)
|
||||||
static bool should_request_dir_deleg(struct inode *inode)
|
static bool should_request_dir_deleg(struct inode *inode)
|
||||||
{
|
{
|
||||||
|
if (!directory_delegations)
|
||||||
|
return false;
|
||||||
if (!inode)
|
if (!inode)
|
||||||
return false;
|
return false;
|
||||||
if (!S_ISDIR(inode->i_mode))
|
if (!S_ISDIR(inode->i_mode))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user