diff mbox series

[v3,2/2] NFSv4.2: threshold for inter-server copy should be configurable.

Message ID 20210409180519.25405-3-dai.ngo@oracle.com (mailing list archive)
State New
Headers show
Series NFSD: delay unmount source's export after inter-server copy completed. | expand

Commit Message

Dai Ngo April 9, 2021, 6:05 p.m. UTC
Replacing threshold computed in __nfs4_copy_file_range with a
module configuration parameter, default to 16MB. This provides
the user the option to configure the threshold to suite each
specific configuration.

Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
---
 fs/nfs/nfs42.h    |  2 ++
 fs/nfs/nfs4file.c | 16 ++++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/fs/nfs/nfs42.h b/fs/nfs/nfs42.h
index 0fe5aac..6aecd05 100644
--- a/fs/nfs/nfs42.h
+++ b/fs/nfs/nfs42.h
@@ -60,5 +60,7 @@  static inline u32 nfs42_listxattr_xdrsize(u32 buflen)
 {
 	return ((buflen / (XATTR_USER_PREFIX_LEN + 2)) * 8) + 4;
 }
+
+extern unsigned int nfs4_ssc_inter_server_min_size;
 #endif /* CONFIG_NFS_V4_2 */
 #endif /* __LINUX_FS_NFS_NFS4_2_H */
diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index 441a2fa..57d6d13 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -20,6 +20,12 @@ 
 
 #ifdef CONFIG_NFS_V4_2
 #include "nfs42.h"
+
+unsigned int nfs4_ssc_inter_server_min_size = (1024*1024*16);
+EXPORT_SYMBOL_GPL(nfs4_ssc_inter_server_min_size);
+module_param(nfs4_ssc_inter_server_min_size, uint, 0644);
+MODULE_PARM_DESC(nfs4_ssc_inter_server_min_size,
+			"threshold to do inter-server copy");
 #endif
 
 #define NFSDBG_FACILITY		NFSDBG_FILE
@@ -158,13 +164,11 @@  static ssize_t __nfs4_copy_file_range(struct file *file_in, loff_t pos_in,
 		sync = true;
 retry:
 	if (!nfs42_files_from_same_server(file_in, file_out)) {
-		/* for inter copy, if copy size if smaller than 12 RPC
-		 * payloads, fallback to traditional copy. There are
-		 * 14 RPCs during an NFSv4.x mount between source/dest
-		 * servers.
+		/*
+		 * for inter copy, if copy size is too small
+		 * then fallback to generic copy.
 		 */
-		if (sync ||
-			count <= 14 * NFS_SERVER(file_inode(file_in))->rsize)
+		if (sync || count <= nfs4_ssc_inter_server_min_size)
 			return -EOPNOTSUPP;
 		cn_resp = kzalloc(sizeof(struct nfs42_copy_notify_res),
 				GFP_NOFS);