NFSv4.1 provide mount option to toggle trunking discovery
authorOlga Kornievskaia <kolga@netapp.com>
Wed, 16 Mar 2022 22:24:26 +0000 (18:24 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 21 Mar 2022 14:36:49 +0000 (10:36 -0400)
Introduce a new mount option -- trunkdiscovery,notrunkdiscovery -- to
toggle whether or not the client will engage in actively discovery
of trunking locations.

v2 make notrunkdiscovery default

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Fixes: 1976b2b31462 ("NFSv4.1 query for fs_location attr on a new file system")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/client.c
fs/nfs/fs_context.c
include/linux/nfs_fs_sb.h

index d1f34229e11ab528129988eac0f0a3fb9f13a4d0..e828504cc396c97d147706e6b5c724224102379f 100644 (file)
@@ -857,7 +857,8 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str
        }
 
        if (clp->rpc_ops->discover_trunking != NULL &&
-                       (server->caps & NFS_CAP_FS_LOCATIONS)) {
+                       (server->caps & NFS_CAP_FS_LOCATIONS &&
+                        (server->flags & NFS_MOUNT_TRUNK_DISCOVERY))) {
                error = clp->rpc_ops->discover_trunking(server, mntfh);
                if (error < 0)
                        return error;
index ea17fa1f31ecb030651efe34ce4c6649bacc9b1c..e2d59bb5e6bbe788953443e6fa54b6ead01c7d7d 100644 (file)
@@ -80,6 +80,7 @@ enum nfs_param {
        Opt_source,
        Opt_tcp,
        Opt_timeo,
+       Opt_trunkdiscovery,
        Opt_udp,
        Opt_v,
        Opt_vers,
@@ -180,6 +181,7 @@ static const struct fs_parameter_spec nfs_fs_parameters[] = {
        fsparam_string("source",        Opt_source),
        fsparam_flag  ("tcp",           Opt_tcp),
        fsparam_u32   ("timeo",         Opt_timeo),
+       fsparam_flag_no("trunkdiscovery", Opt_trunkdiscovery),
        fsparam_flag  ("udp",           Opt_udp),
        fsparam_flag  ("v2",            Opt_v),
        fsparam_flag  ("v3",            Opt_v),
@@ -529,6 +531,12 @@ static int nfs_fs_context_parse_param(struct fs_context *fc,
                else
                        ctx->flags &= ~NFS_MOUNT_NOCTO;
                break;
+       case Opt_trunkdiscovery:
+               if (result.negated)
+                       ctx->flags &= ~NFS_MOUNT_TRUNK_DISCOVERY;
+               else
+                       ctx->flags |= NFS_MOUNT_TRUNK_DISCOVERY;
+               break;
        case Opt_ac:
                if (result.negated)
                        ctx->flags |= NFS_MOUNT_NOAC;
index ca0959e51e817cfd5002d79200da255077f85811..b0e3fd550122c42557fe7bbd6ce97cfdbe3aef65 100644 (file)
@@ -151,6 +151,7 @@ struct nfs_server {
 #define NFS_MOUNT_SOFTREVAL            0x800000
 #define NFS_MOUNT_WRITE_EAGER          0x01000000
 #define NFS_MOUNT_WRITE_WAIT           0x02000000
+#define NFS_MOUNT_TRUNK_DISCOVERY      0x04000000
 
        unsigned int            fattr_valid;    /* Valid attributes */
        unsigned int            caps;           /* server capabilities */