aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Tao <tao.peng@primarydata.com>2014-05-30 06:15:58 -0400
committerTom Haynes <loghyr@primarydata.com>2015-02-03 14:06:34 -0500
commit30626f9c32f0ad5e2c4173f10fb4b1358bbba6ec (patch)
treeaaa2365a2d206f1ab4e7b93e21193ad7085f1221
parent1a04c6e1a26a43305fe124a0978a3e4be861af89 (diff)
nfs41: allow LD to choose DS connection version/minor_version
flexfile layout may need to set such when making DS connections. Signed-off-by: Peng Tao <tao.peng@primarydata.com> Signed-off-by: Tom Haynes <Thomas.Haynes@primarydata.com>
-rw-r--r--fs/nfs/filelayout/filelayoutdev.c3
-rw-r--r--fs/nfs/internal.h1
-rw-r--r--fs/nfs/nfs4client.c4
-rw-r--r--fs/nfs/pnfs.h3
-rw-r--r--fs/nfs/pnfs_nfs.c11
5 files changed, 14 insertions, 8 deletions
diff --git a/fs/nfs/filelayout/filelayoutdev.c b/fs/nfs/filelayout/filelayoutdev.c
index 5e4b0cea84c8..4f372e224603 100644
--- a/fs/nfs/filelayout/filelayoutdev.c
+++ b/fs/nfs/filelayout/filelayoutdev.c
@@ -278,7 +278,8 @@ nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx)
278 goto out_test_devid; 278 goto out_test_devid;
279 279
280 nfs4_pnfs_ds_connect(s, ds, devid, dataserver_timeo, 280 nfs4_pnfs_ds_connect(s, ds, devid, dataserver_timeo,
281 dataserver_retrans, 281 dataserver_retrans, 4,
282 s->nfs_client->cl_minorversion,
282 s->nfs_client->cl_rpcclient->cl_auth->au_flavor); 283 s->nfs_client->cl_rpcclient->cl_auth->au_flavor);
283 284
284out_test_devid: 285out_test_devid:
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 7332ba1f693b..5543850268d2 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -190,6 +190,7 @@ extern struct nfs_client *nfs4_set_ds_client(struct nfs_client* mds_clp,
190 int ds_addrlen, int ds_proto, 190 int ds_addrlen, int ds_proto,
191 unsigned int ds_timeo, 191 unsigned int ds_timeo,
192 unsigned int ds_retrans, 192 unsigned int ds_retrans,
193 u32 minor_version,
193 rpc_authflavor_t au_flavor); 194 rpc_authflavor_t au_flavor);
194extern struct rpc_clnt *nfs4_find_or_create_ds_client(struct nfs_client *, 195extern struct rpc_clnt *nfs4_find_or_create_ds_client(struct nfs_client *,
195 struct inode *); 196 struct inode *);
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 62d93a116790..102d96777d42 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -850,14 +850,14 @@ error:
850struct nfs_client *nfs4_set_ds_client(struct nfs_client* mds_clp, 850struct nfs_client *nfs4_set_ds_client(struct nfs_client* mds_clp,
851 const struct sockaddr *ds_addr, int ds_addrlen, 851 const struct sockaddr *ds_addr, int ds_addrlen,
852 int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans, 852 int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans,
853 rpc_authflavor_t au_flavor) 853 u32 minor_version, rpc_authflavor_t au_flavor)
854{ 854{
855 struct nfs_client_initdata cl_init = { 855 struct nfs_client_initdata cl_init = {
856 .addr = ds_addr, 856 .addr = ds_addr,
857 .addrlen = ds_addrlen, 857 .addrlen = ds_addrlen,
858 .nfs_mod = &nfs_v4, 858 .nfs_mod = &nfs_v4,
859 .proto = ds_proto, 859 .proto = ds_proto,
860 .minorversion = mds_clp->cl_minorversion, 860 .minorversion = minor_version,
861 .net = mds_clp->cl_net, 861 .net = mds_clp->cl_net,
862 }; 862 };
863 struct rpc_timeout ds_timeout; 863 struct rpc_timeout ds_timeout;
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index aef89b347bdc..70ffec135696 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -325,7 +325,8 @@ struct nfs4_pnfs_ds *nfs4_pnfs_ds_add(struct list_head *dsaddrs,
325 gfp_t gfp_flags); 325 gfp_t gfp_flags);
326void nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds, 326void nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds,
327 struct nfs4_deviceid_node *devid, unsigned int timeo, 327 struct nfs4_deviceid_node *devid, unsigned int timeo,
328 unsigned int retrans, rpc_authflavor_t au_flavor); 328 unsigned int retrans, u32 versoin, u32 minor_version,
329 rpc_authflavor_t au_flavor);
329struct nfs4_pnfs_ds_addr *nfs4_decode_mp_ds_addr(struct net *net, 330struct nfs4_pnfs_ds_addr *nfs4_decode_mp_ds_addr(struct net *net,
330 struct xdr_stream *xdr, 331 struct xdr_stream *xdr,
331 gfp_t gfp_flags); 332 gfp_t gfp_flags);
diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c
index 106ee08ef52f..ad211a4e1874 100644
--- a/fs/nfs/pnfs_nfs.c
+++ b/fs/nfs/pnfs_nfs.c
@@ -554,6 +554,7 @@ static int _nfs4_pnfs_ds_connect(struct nfs_server *mds_srv,
554 struct nfs4_pnfs_ds *ds, 554 struct nfs4_pnfs_ds *ds,
555 unsigned int timeo, 555 unsigned int timeo,
556 unsigned int retrans, 556 unsigned int retrans,
557 u32 minor_version,
557 rpc_authflavor_t au_flavor) 558 rpc_authflavor_t au_flavor)
558{ 559{
559 struct nfs_client *clp = ERR_PTR(-EIO); 560 struct nfs_client *clp = ERR_PTR(-EIO);
@@ -570,7 +571,8 @@ static int _nfs4_pnfs_ds_connect(struct nfs_server *mds_srv,
570 clp = nfs4_set_ds_client(mds_srv->nfs_client, 571 clp = nfs4_set_ds_client(mds_srv->nfs_client,
571 (struct sockaddr *)&da->da_addr, 572 (struct sockaddr *)&da->da_addr,
572 da->da_addrlen, IPPROTO_TCP, 573 da->da_addrlen, IPPROTO_TCP,
573 timeo, retrans, au_flavor); 574 timeo, retrans, minor_version,
575 au_flavor);
574 if (!IS_ERR(clp)) 576 if (!IS_ERR(clp))
575 break; 577 break;
576 } 578 }
@@ -601,13 +603,14 @@ out_put:
601 */ 603 */
602void nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds, 604void nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds,
603 struct nfs4_deviceid_node *devid, unsigned int timeo, 605 struct nfs4_deviceid_node *devid, unsigned int timeo,
604 unsigned int retrans, rpc_authflavor_t au_flavor) 606 unsigned int retrans, u32 version,
607 u32 minor_version, rpc_authflavor_t au_flavor)
605{ 608{
606 if (test_and_set_bit(NFS4DS_CONNECTING, &ds->ds_state) == 0) { 609 if (test_and_set_bit(NFS4DS_CONNECTING, &ds->ds_state) == 0) {
607 int err = 0; 610 int err = 0;
608 611
609 err = _nfs4_pnfs_ds_connect(mds_srv, ds, timeo, 612 err = _nfs4_pnfs_ds_connect(mds_srv, ds, timeo, retrans,
610 retrans, au_flavor); 613 minor_version, au_flavor);
611 if (err) 614 if (err)
612 nfs4_mark_deviceid_unavailable(devid); 615 nfs4_mark_deviceid_unavailable(devid);
613 nfs4_clear_ds_conn_bit(ds); 616 nfs4_clear_ds_conn_bit(ds);