diff options
Diffstat (limited to 'fs/nfs/client.c')
-rw-r--r-- | fs/nfs/client.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index a204484072f3..a532ee12740a 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <linux/sunrpc/clnt.h> | 23 | #include <linux/sunrpc/clnt.h> |
24 | #include <linux/sunrpc/stats.h> | 24 | #include <linux/sunrpc/stats.h> |
25 | #include <linux/sunrpc/metrics.h> | 25 | #include <linux/sunrpc/metrics.h> |
26 | #include <linux/sunrpc/xprtsock.h> | ||
27 | #include <linux/sunrpc/xprtrdma.h> | ||
26 | #include <linux/nfs_fs.h> | 28 | #include <linux/nfs_fs.h> |
27 | #include <linux/nfs_mount.h> | 29 | #include <linux/nfs_mount.h> |
28 | #include <linux/nfs4_mount.h> | 30 | #include <linux/nfs4_mount.h> |
@@ -340,7 +342,8 @@ static void nfs_init_timeout_values(struct rpc_timeout *to, int proto, | |||
340 | to->to_retries = 2; | 342 | to->to_retries = 2; |
341 | 343 | ||
342 | switch (proto) { | 344 | switch (proto) { |
343 | case IPPROTO_TCP: | 345 | case XPRT_TRANSPORT_TCP: |
346 | case XPRT_TRANSPORT_RDMA: | ||
344 | if (!to->to_initval) | 347 | if (!to->to_initval) |
345 | to->to_initval = 60 * HZ; | 348 | to->to_initval = 60 * HZ; |
346 | if (to->to_initval > NFS_MAX_TCP_TIMEOUT) | 349 | if (to->to_initval > NFS_MAX_TCP_TIMEOUT) |
@@ -349,7 +352,7 @@ static void nfs_init_timeout_values(struct rpc_timeout *to, int proto, | |||
349 | to->to_maxval = to->to_initval + (to->to_increment * to->to_retries); | 352 | to->to_maxval = to->to_initval + (to->to_increment * to->to_retries); |
350 | to->to_exponential = 0; | 353 | to->to_exponential = 0; |
351 | break; | 354 | break; |
352 | case IPPROTO_UDP: | 355 | case XPRT_TRANSPORT_UDP: |
353 | default: | 356 | default: |
354 | if (!to->to_initval) | 357 | if (!to->to_initval) |
355 | to->to_initval = 11 * HZ / 10; | 358 | to->to_initval = 11 * HZ / 10; |
@@ -501,9 +504,9 @@ static int nfs_init_server_rpcclient(struct nfs_server *server, rpc_authflavor_t | |||
501 | /* | 504 | /* |
502 | * Initialise an NFS2 or NFS3 client | 505 | * Initialise an NFS2 or NFS3 client |
503 | */ | 506 | */ |
504 | static int nfs_init_client(struct nfs_client *clp, const struct nfs_mount_data *data) | 507 | static int nfs_init_client(struct nfs_client *clp, |
508 | const struct nfs_parsed_mount_data *data) | ||
505 | { | 509 | { |
506 | int proto = (data->flags & NFS_MOUNT_TCP) ? IPPROTO_TCP : IPPROTO_UDP; | ||
507 | int error; | 510 | int error; |
508 | 511 | ||
509 | if (clp->cl_cons_state == NFS_CS_READY) { | 512 | if (clp->cl_cons_state == NFS_CS_READY) { |
@@ -522,8 +525,8 @@ static int nfs_init_client(struct nfs_client *clp, const struct nfs_mount_data * | |||
522 | * Create a client RPC handle for doing FSSTAT with UNIX auth only | 525 | * Create a client RPC handle for doing FSSTAT with UNIX auth only |
523 | * - RFC 2623, sec 2.3.2 | 526 | * - RFC 2623, sec 2.3.2 |
524 | */ | 527 | */ |
525 | error = nfs_create_rpc_client(clp, proto, data->timeo, data->retrans, | 528 | error = nfs_create_rpc_client(clp, data->nfs_server.protocol, |
526 | RPC_AUTH_UNIX, 0); | 529 | data->timeo, data->retrans, RPC_AUTH_UNIX, 0); |
527 | if (error < 0) | 530 | if (error < 0) |
528 | goto error; | 531 | goto error; |
529 | nfs_mark_client_ready(clp, NFS_CS_READY); | 532 | nfs_mark_client_ready(clp, NFS_CS_READY); |
@@ -538,7 +541,8 @@ error: | |||
538 | /* | 541 | /* |
539 | * Create a version 2 or 3 client | 542 | * Create a version 2 or 3 client |
540 | */ | 543 | */ |
541 | static int nfs_init_server(struct nfs_server *server, const struct nfs_mount_data *data) | 544 | static int nfs_init_server(struct nfs_server *server, |
545 | const struct nfs_parsed_mount_data *data) | ||
542 | { | 546 | { |
543 | struct nfs_client *clp; | 547 | struct nfs_client *clp; |
544 | int error, nfsvers = 2; | 548 | int error, nfsvers = 2; |
@@ -551,7 +555,8 @@ static int nfs_init_server(struct nfs_server *server, const struct nfs_mount_dat | |||
551 | #endif | 555 | #endif |
552 | 556 | ||
553 | /* Allocate or find a client reference we can use */ | 557 | /* Allocate or find a client reference we can use */ |
554 | clp = nfs_get_client(data->hostname, &data->addr, nfsvers); | 558 | clp = nfs_get_client(data->nfs_server.hostname, |
559 | &data->nfs_server.address, nfsvers); | ||
555 | if (IS_ERR(clp)) { | 560 | if (IS_ERR(clp)) { |
556 | dprintk("<-- nfs_init_server() = error %ld\n", PTR_ERR(clp)); | 561 | dprintk("<-- nfs_init_server() = error %ld\n", PTR_ERR(clp)); |
557 | return PTR_ERR(clp); | 562 | return PTR_ERR(clp); |
@@ -581,7 +586,7 @@ static int nfs_init_server(struct nfs_server *server, const struct nfs_mount_dat | |||
581 | if (error < 0) | 586 | if (error < 0) |
582 | goto error; | 587 | goto error; |
583 | 588 | ||
584 | error = nfs_init_server_rpcclient(server, data->pseudoflavor); | 589 | error = nfs_init_server_rpcclient(server, data->auth_flavors[0]); |
585 | if (error < 0) | 590 | if (error < 0) |
586 | goto error; | 591 | goto error; |
587 | 592 | ||
@@ -760,7 +765,7 @@ void nfs_free_server(struct nfs_server *server) | |||
760 | * Create a version 2 or 3 volume record | 765 | * Create a version 2 or 3 volume record |
761 | * - keyed on server and FSID | 766 | * - keyed on server and FSID |
762 | */ | 767 | */ |
763 | struct nfs_server *nfs_create_server(const struct nfs_mount_data *data, | 768 | struct nfs_server *nfs_create_server(const struct nfs_parsed_mount_data *data, |
764 | struct nfs_fh *mntfh) | 769 | struct nfs_fh *mntfh) |
765 | { | 770 | { |
766 | struct nfs_server *server; | 771 | struct nfs_server *server; |
@@ -906,7 +911,7 @@ error: | |||
906 | * Create a version 4 volume record | 911 | * Create a version 4 volume record |
907 | */ | 912 | */ |
908 | static int nfs4_init_server(struct nfs_server *server, | 913 | static int nfs4_init_server(struct nfs_server *server, |
909 | const struct nfs4_mount_data *data, rpc_authflavor_t authflavour) | 914 | const struct nfs_parsed_mount_data *data) |
910 | { | 915 | { |
911 | int error; | 916 | int error; |
912 | 917 | ||
@@ -926,7 +931,7 @@ static int nfs4_init_server(struct nfs_server *server, | |||
926 | server->acdirmin = data->acdirmin * HZ; | 931 | server->acdirmin = data->acdirmin * HZ; |
927 | server->acdirmax = data->acdirmax * HZ; | 932 | server->acdirmax = data->acdirmax * HZ; |
928 | 933 | ||
929 | error = nfs_init_server_rpcclient(server, authflavour); | 934 | error = nfs_init_server_rpcclient(server, data->auth_flavors[0]); |
930 | 935 | ||
931 | /* Done */ | 936 | /* Done */ |
932 | dprintk("<-- nfs4_init_server() = %d\n", error); | 937 | dprintk("<-- nfs4_init_server() = %d\n", error); |
@@ -937,12 +942,7 @@ static int nfs4_init_server(struct nfs_server *server, | |||
937 | * Create a version 4 volume record | 942 | * Create a version 4 volume record |
938 | * - keyed on server and FSID | 943 | * - keyed on server and FSID |
939 | */ | 944 | */ |
940 | struct nfs_server *nfs4_create_server(const struct nfs4_mount_data *data, | 945 | struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data, |
941 | const char *hostname, | ||
942 | const struct sockaddr_in *addr, | ||
943 | const char *mntpath, | ||
944 | const char *ip_addr, | ||
945 | rpc_authflavor_t authflavour, | ||
946 | struct nfs_fh *mntfh) | 946 | struct nfs_fh *mntfh) |
947 | { | 947 | { |
948 | struct nfs_fattr fattr; | 948 | struct nfs_fattr fattr; |
@@ -956,13 +956,18 @@ struct nfs_server *nfs4_create_server(const struct nfs4_mount_data *data, | |||
956 | return ERR_PTR(-ENOMEM); | 956 | return ERR_PTR(-ENOMEM); |
957 | 957 | ||
958 | /* Get a client record */ | 958 | /* Get a client record */ |
959 | error = nfs4_set_client(server, hostname, addr, ip_addr, authflavour, | 959 | error = nfs4_set_client(server, |
960 | data->proto, data->timeo, data->retrans); | 960 | data->nfs_server.hostname, |
961 | &data->nfs_server.address, | ||
962 | data->client_address, | ||
963 | data->auth_flavors[0], | ||
964 | data->nfs_server.protocol, | ||
965 | data->timeo, data->retrans); | ||
961 | if (error < 0) | 966 | if (error < 0) |
962 | goto error; | 967 | goto error; |
963 | 968 | ||
964 | /* set up the general RPC client */ | 969 | /* set up the general RPC client */ |
965 | error = nfs4_init_server(server, data, authflavour); | 970 | error = nfs4_init_server(server, data); |
966 | if (error < 0) | 971 | if (error < 0) |
967 | goto error; | 972 | goto error; |
968 | 973 | ||
@@ -971,7 +976,7 @@ struct nfs_server *nfs4_create_server(const struct nfs4_mount_data *data, | |||
971 | BUG_ON(!server->nfs_client->rpc_ops->file_inode_ops); | 976 | BUG_ON(!server->nfs_client->rpc_ops->file_inode_ops); |
972 | 977 | ||
973 | /* Probe the root fh to retrieve its FSID */ | 978 | /* Probe the root fh to retrieve its FSID */ |
974 | error = nfs4_path_walk(server, mntfh, mntpath); | 979 | error = nfs4_path_walk(server, mntfh, data->nfs_server.export_path); |
975 | if (error < 0) | 980 | if (error < 0) |
976 | goto error; | 981 | goto error; |
977 | 982 | ||