diff options
author | Tom Talpey <tmtalpey@gmail.com> | 2009-03-11 14:37:56 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-03-11 14:37:56 -0400 |
commit | a67d18f89f5782806135aad4ee012ff78d45aae7 (patch) | |
tree | 8ee9712d4217d585199a95da7388dd0761c3e32d | |
parent | 441e3e242903f9b190d5764bed73edb58f977413 (diff) |
NFS: load the rpc/rdma transport module automatically
When mounting an NFS/RDMA server with the "-o proto=rdma" or
"-o rdma" options, attempt to dynamically load the necessary
"xprtrdma" client transport module. Doing so improves usability,
while avoiding a static module dependency and any unnecesary
resources.
Signed-off-by: Tom Talpey <tmtalpey@gmail.com>
Cc: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | fs/nfs/super.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index d6686f4786dc..0942fcbbad3c 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -1018,6 +1018,7 @@ static int nfs_parse_mount_options(char *raw, | |||
1018 | case Opt_rdma: | 1018 | case Opt_rdma: |
1019 | mnt->flags |= NFS_MOUNT_TCP; /* for side protocols */ | 1019 | mnt->flags |= NFS_MOUNT_TCP; /* for side protocols */ |
1020 | mnt->nfs_server.protocol = XPRT_TRANSPORT_RDMA; | 1020 | mnt->nfs_server.protocol = XPRT_TRANSPORT_RDMA; |
1021 | xprt_load_transport(p); | ||
1021 | break; | 1022 | break; |
1022 | case Opt_acl: | 1023 | case Opt_acl: |
1023 | mnt->flags &= ~NFS_MOUNT_NOACL; | 1024 | mnt->flags &= ~NFS_MOUNT_NOACL; |
@@ -1205,12 +1206,14 @@ static int nfs_parse_mount_options(char *raw, | |||
1205 | /* vector side protocols to TCP */ | 1206 | /* vector side protocols to TCP */ |
1206 | mnt->flags |= NFS_MOUNT_TCP; | 1207 | mnt->flags |= NFS_MOUNT_TCP; |
1207 | mnt->nfs_server.protocol = XPRT_TRANSPORT_RDMA; | 1208 | mnt->nfs_server.protocol = XPRT_TRANSPORT_RDMA; |
1209 | xprt_load_transport(string); | ||
1208 | break; | 1210 | break; |
1209 | default: | 1211 | default: |
1210 | errors++; | 1212 | errors++; |
1211 | dfprintk(MOUNT, "NFS: unrecognized " | 1213 | dfprintk(MOUNT, "NFS: unrecognized " |
1212 | "transport protocol\n"); | 1214 | "transport protocol\n"); |
1213 | } | 1215 | } |
1216 | kfree(string); | ||
1214 | break; | 1217 | break; |
1215 | case Opt_mountproto: | 1218 | case Opt_mountproto: |
1216 | string = match_strdup(args); | 1219 | string = match_strdup(args); |
@@ -1218,7 +1221,6 @@ static int nfs_parse_mount_options(char *raw, | |||
1218 | goto out_nomem; | 1221 | goto out_nomem; |
1219 | token = match_token(string, | 1222 | token = match_token(string, |
1220 | nfs_xprt_protocol_tokens, args); | 1223 | nfs_xprt_protocol_tokens, args); |
1221 | kfree(string); | ||
1222 | 1224 | ||
1223 | switch (token) { | 1225 | switch (token) { |
1224 | case Opt_xprt_udp: | 1226 | case Opt_xprt_udp: |