diff options
author | Stanislav Kinsbursky <skinsbursky@parallels.com> | 2012-11-14 10:21:10 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-11-15 07:40:42 -0500 |
commit | c212cecfa21b3d30cd5cc2389754a46973ad9027 (patch) | |
tree | ce0e190694a98dd8f526b00d9b60aa8861faebbc /fs | |
parent | 7f2210fa6b791c290e36d8b3c8af7aaf22b2aaf0 (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.c | 2 | ||||
-rw-r--r-- | fs/nfsd/nfs4recover.c | 9 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 15 | ||||
-rw-r--r-- | fs/nfsd/state.h | 1 |
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 | ||
1266 | static void gen_clid(struct nfs4_client *clp) | 1266 | static 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); |
1706 | out_copy: | 1708 | out_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 | ||
288 | static inline void | 289 | static inline void |