]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
NFS: Switch mount code to use xprt_find_transport_ident()
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 10 Nov 2020 15:30:35 +0000 (10:30 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 2 Dec 2020 19:05:53 +0000 (14:05 -0500)
Switch the mount code to use xprt_find_transport_ident() and to check
the results before allowing the mount to proceed.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/fs_context.c

index 29ec8b09a52d8de4d8fcfffc127faa9ac7331f02..06894bcdea2db6321a86e410bd2a81ba384437a0 100644 (file)
@@ -510,13 +510,12 @@ static int nfs_fs_context_parse_param(struct fs_context *fc,
                ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP;
                break;
        case Opt_tcp:
-               ctx->flags |= NFS_MOUNT_TCP;
-               ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
-               break;
        case Opt_rdma:
                ctx->flags |= NFS_MOUNT_TCP; /* for side protocols */
-               ctx->nfs_server.protocol = XPRT_TRANSPORT_RDMA;
-               xprt_load_transport(param->key);
+               ret = xprt_find_transport_ident(param->key);
+               if (ret < 0)
+                       goto out_bad_transport;
+               ctx->nfs_server.protocol = ret;
                break;
        case Opt_acl:
                if (result.negated)
@@ -670,11 +669,13 @@ static int nfs_fs_context_parse_param(struct fs_context *fc,
                case Opt_xprt_rdma:
                        /* vector side protocols to TCP */
                        ctx->flags |= NFS_MOUNT_TCP;
-                       ctx->nfs_server.protocol = XPRT_TRANSPORT_RDMA;
-                       xprt_load_transport(param->string);
+                       ret = xprt_find_transport_ident(param->string);
+                       if (ret < 0)
+                               goto out_bad_transport;
+                       ctx->nfs_server.protocol = ret;
                        break;
                default:
-                       return nfs_invalf(fc, "NFS: Unrecognized transport protocol");
+                       goto out_bad_transport;
                }
 
                ctx->protofamily = protofamily;
@@ -697,7 +698,7 @@ static int nfs_fs_context_parse_param(struct fs_context *fc,
                        break;
                case Opt_xprt_rdma: /* not used for side protocols */
                default:
-                       return nfs_invalf(fc, "NFS: Unrecognized transport protocol");
+                       goto out_bad_transport;
                }
                ctx->mountfamily = mountfamily;
                break;
@@ -787,6 +788,8 @@ out_invalid_address:
        return nfs_invalf(fc, "NFS: Bad IP address specified");
 out_of_bounds:
        return nfs_invalf(fc, "NFS: Value for '%s' out of range", param->key);
+out_bad_transport:
+       return nfs_invalf(fc, "NFS: Unrecognized transport protocol");
 }
 
 /*