aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2012-11-14 10:21:10 -0500
committerJ. Bruce Fields <bfields@redhat.com>2012-11-15 07:40:42 -0500
commitc212cecfa21b3d30cd5cc2389754a46973ad9027 (patch)
treece0e190694a98dd8f526b00d9b60aa8861faebbc /fs
parent7f2210fa6b791c290e36d8b3c8af7aaf22b2aaf0 (diff)
nfsd: make nfs4_client network namespace dependent
And use it's net where possible. Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfsd/nfs4callback.c2
-rw-r--r--fs/nfsd/nfs4recover.c9
-rw-r--r--fs/nfsd/nfs4state.c15
-rw-r--r--fs/nfsd/state.h1
4 files changed, 14 insertions, 13 deletions
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 99684702301..826cc269c44 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -663,7 +663,7 @@ static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *c
663 .to_retries = 0, 663 .to_retries = 0,
664 }; 664 };
665 struct rpc_create_args args = { 665 struct rpc_create_args args = {
666 .net = &init_net, 666 .net = clp->net,
667 .address = (struct sockaddr *) &conn->cb_addr, 667 .address = (struct sockaddr *) &conn->cb_addr,
668 .addrsize = conn->cb_addrlen, 668 .addrsize = conn->cb_addrlen,
669 .saddress = (struct sockaddr *) &conn->cb_saddr, 669 .saddress = (struct sockaddr *) &conn->cb_saddr,
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
index b03b6aa7a6a..9881bcad264 100644
--- a/fs/nfsd/nfs4recover.c
+++ b/fs/nfsd/nfs4recover.c
@@ -859,8 +859,7 @@ nfsd4_cld_create(struct nfs4_client *clp)
859{ 859{
860 int ret; 860 int ret;
861 struct cld_upcall *cup; 861 struct cld_upcall *cup;
862 /* FIXME: determine net from clp */ 862 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
863 struct nfsd_net *nn = net_generic(&init_net, nfsd_net_id);
864 struct cld_net *cn = nn->cld_net; 863 struct cld_net *cn = nn->cld_net;
865 864
866 /* Don't upcall if it's already stored */ 865 /* Don't upcall if it's already stored */
@@ -897,8 +896,7 @@ nfsd4_cld_remove(struct nfs4_client *clp)
897{ 896{
898 int ret; 897 int ret;
899 struct cld_upcall *cup; 898 struct cld_upcall *cup;
900 /* FIXME: determine net from clp */ 899 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
901 struct nfsd_net *nn = net_generic(&init_net, nfsd_net_id);
902 struct cld_net *cn = nn->cld_net; 900 struct cld_net *cn = nn->cld_net;
903 901
904 /* Don't upcall if it's already removed */ 902 /* Don't upcall if it's already removed */
@@ -935,8 +933,7 @@ nfsd4_cld_check(struct nfs4_client *clp)
935{ 933{
936 int ret; 934 int ret;
937 struct cld_upcall *cup; 935 struct cld_upcall *cup;
938 /* FIXME: determine net from clp */ 936 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);
939 struct nfsd_net *nn = net_generic(&init_net, nfsd_net_id);
940 struct cld_net *cn = nn->cld_net; 937 struct cld_net *cn = nn->cld_net;
941 938
942 /* Don't upcall if one was already stored during this grace pd */ 939 /* Don't upcall if one was already stored during this grace pd */
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 207b9afbbac..001bbc99d7a 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1263,10 +1263,9 @@ same_creds(struct svc_cred *cr1, struct svc_cred *cr2)
1263 return 0 == strcmp(cr1->cr_principal, cr2->cr_principal); 1263 return 0 == strcmp(cr1->cr_principal, cr2->cr_principal);
1264} 1264}
1265 1265
1266static void gen_clid(struct nfs4_client *clp) 1266static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn)
1267{ 1267{
1268 static u32 current_clientid = 1; 1268 static u32 current_clientid = 1;
1269 struct nfsd_net *nn = net_generic(&init_net, nfsd_net_id);
1270 1269
1271 clp->cl_clientid.cl_boot = nn->boot_time; 1270 clp->cl_clientid.cl_boot = nn->boot_time;
1272 clp->cl_clientid.cl_id = current_clientid++; 1271 clp->cl_clientid.cl_id = current_clientid++;
@@ -1305,6 +1304,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name,
1305 struct nfs4_client *clp; 1304 struct nfs4_client *clp;
1306 struct sockaddr *sa = svc_addr(rqstp); 1305 struct sockaddr *sa = svc_addr(rqstp);
1307 int ret; 1306 int ret;
1307 struct net *net = SVC_NET(rqstp);
1308 1308
1309 clp = alloc_client(name); 1309 clp = alloc_client(name);
1310 if (clp == NULL) 1310 if (clp == NULL)
@@ -1335,6 +1335,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name,
1335 rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa); 1335 rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa);
1336 gen_confirm(clp); 1336 gen_confirm(clp);
1337 clp->cl_cb_session = NULL; 1337 clp->cl_cb_session = NULL;
1338 clp->net = net;
1338 return clp; 1339 return clp;
1339} 1340}
1340 1341
@@ -1471,7 +1472,7 @@ gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_r
1471 else 1472 else
1472 goto out_err; 1473 goto out_err;
1473 1474
1474 conn->cb_addrlen = rpc_uaddr2sockaddr(&init_net, se->se_callback_addr_val, 1475 conn->cb_addrlen = rpc_uaddr2sockaddr(clp->net, se->se_callback_addr_val,
1475 se->se_callback_addr_len, 1476 se->se_callback_addr_len,
1476 (struct sockaddr *)&conn->cb_addr, 1477 (struct sockaddr *)&conn->cb_addr,
1477 sizeof(conn->cb_addr)); 1478 sizeof(conn->cb_addr));
@@ -1619,6 +1620,7 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
1619 nfs4_verifier verf = exid->verifier; 1620 nfs4_verifier verf = exid->verifier;
1620 struct sockaddr *sa = svc_addr(rqstp); 1621 struct sockaddr *sa = svc_addr(rqstp);
1621 bool update = exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A; 1622 bool update = exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A;
1623 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
1622 1624
1623 rpc_ntop(sa, addr_str, sizeof(addr_str)); 1625 rpc_ntop(sa, addr_str, sizeof(addr_str));
1624 dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p " 1626 dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p "
@@ -1701,7 +1703,7 @@ out_new:
1701 } 1703 }
1702 new->cl_minorversion = 1; 1704 new->cl_minorversion = 1;
1703 1705
1704 gen_clid(new); 1706 gen_clid(new, nn);
1705 add_to_unconfirmed(new); 1707 add_to_unconfirmed(new);
1706out_copy: 1708out_copy:
1707 exid->clientid.cl_boot = new->cl_clientid.cl_boot; 1709 exid->clientid.cl_boot = new->cl_clientid.cl_boot;
@@ -2229,7 +2231,8 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2229 nfs4_verifier clverifier = setclid->se_verf; 2231 nfs4_verifier clverifier = setclid->se_verf;
2230 struct nfs4_client *conf, *unconf, *new; 2232 struct nfs4_client *conf, *unconf, *new;
2231 __be32 status; 2233 __be32 status;
2232 2234 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
2235
2233 /* Cases below refer to rfc 3530 section 14.2.33: */ 2236 /* Cases below refer to rfc 3530 section 14.2.33: */
2234 nfs4_lock_state(); 2237 nfs4_lock_state();
2235 conf = find_confirmed_client_by_name(&clname); 2238 conf = find_confirmed_client_by_name(&clname);
@@ -2258,7 +2261,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
2258 /* case 1: probable callback update */ 2261 /* case 1: probable callback update */
2259 copy_clid(new, conf); 2262 copy_clid(new, conf);
2260 else /* case 4 (new client) or cases 2, 3 (client reboot): */ 2263 else /* case 4 (new client) or cases 2, 3 (client reboot): */
2261 gen_clid(new); 2264 gen_clid(new, nn);
2262 new->cl_minorversion = 0; 2265 new->cl_minorversion = 0;
2263 gen_callback(new, setclid, rqstp); 2266 gen_callback(new, setclid, rqstp);
2264 add_to_unconfirmed(new); 2267 add_to_unconfirmed(new);
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
index 029217ad2cb..ca8ee8c3ae7 100644
--- a/fs/nfsd/state.h
+++ b/fs/nfsd/state.h
@@ -283,6 +283,7 @@ struct nfs4_client {
283 unsigned long cl_cb_slot_busy; 283 unsigned long cl_cb_slot_busy;
284 struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */ 284 struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */
285 /* wait here for slots */ 285 /* wait here for slots */
286 struct net *net;
286}; 287};
287 288
288static inline void 289static inline void