diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-25 09:42:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-25 09:42:01 -0400 |
commit | 1442d1678ca7e53574fd403ba7bee6f4125d920c (patch) | |
tree | fd053a849158d2c5b8345ced8982108825b85736 /fs/nfs | |
parent | 7e0bb71e75020348bee523720a0c2f04cc72f540 (diff) | |
parent | 345c284290cabb5484df909303e73d6def8ec8ec (diff) |
Merge branch 'for-3.2' of git://linux-nfs.org/~bfields/linux
* 'for-3.2' of git://linux-nfs.org/~bfields/linux: (103 commits)
nfs41: implement DESTROY_CLIENTID operation
nfsd4: typo logical vs bitwise negate for want_mask
nfsd4: allow NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL | NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED
nfsd4: seq->status_flags may be used unitialized
nfsd41: use SEQ4_STATUS_BACKCHANNEL_FAULT when cb_sequence is invalid
nfsd4: implement new 4.1 open reclaim types
nfsd4: remove unneeded CLAIM_DELEGATE_CUR workaround
nfsd4: warn on open failure after create
nfsd4: preallocate open stateid in process_open1()
nfsd4: do idr preallocation with stateid allocation
nfsd4: preallocate nfs4_file in process_open1()
nfsd4: clean up open owners on OPEN failure
nfsd4: simplify process_open1 logic
nfsd4: make is_open_owner boolean
nfsd4: centralize renew_client() calls
nfsd4: typo logical vs bitwise negate
nfs: fix bug about IPv6 address scope checking
nfsd4: more robust ignoring of WANT bits in OPEN
nfsd4: move name-length checks to xdr
nfsd4: move access/deny validity checks to xdr code
...
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/callback.c | 4 | ||||
-rw-r--r-- | fs/nfs/client.c | 7 | ||||
-rw-r--r-- | fs/nfs/nfs4_fs.h | 24 |
3 files changed, 6 insertions, 29 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index e3d29426905..516f3375e06 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -125,7 +125,7 @@ nfs4_callback_up(struct svc_serv *serv) | |||
125 | else | 125 | else |
126 | goto out_err; | 126 | goto out_err; |
127 | 127 | ||
128 | return svc_prepare_thread(serv, &serv->sv_pools[0]); | 128 | return svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE); |
129 | 129 | ||
130 | out_err: | 130 | out_err: |
131 | if (ret == 0) | 131 | if (ret == 0) |
@@ -199,7 +199,7 @@ nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt) | |||
199 | INIT_LIST_HEAD(&serv->sv_cb_list); | 199 | INIT_LIST_HEAD(&serv->sv_cb_list); |
200 | spin_lock_init(&serv->sv_cb_lock); | 200 | spin_lock_init(&serv->sv_cb_lock); |
201 | init_waitqueue_head(&serv->sv_cb_waitq); | 201 | init_waitqueue_head(&serv->sv_cb_waitq); |
202 | rqstp = svc_prepare_thread(serv, &serv->sv_pools[0]); | 202 | rqstp = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE); |
203 | if (IS_ERR(rqstp)) { | 203 | if (IS_ERR(rqstp)) { |
204 | svc_xprt_put(serv->sv_bc_xprt); | 204 | svc_xprt_put(serv->sv_bc_xprt); |
205 | serv->sv_bc_xprt = NULL; | 205 | serv->sv_bc_xprt = NULL; |
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 5833fbbf59b..b4e41dd4d0f 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -336,11 +336,12 @@ static int nfs_sockaddr_match_ipaddr6(const struct sockaddr *sa1, | |||
336 | const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sa1; | 336 | const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sa1; |
337 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sa2; | 337 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sa2; |
338 | 338 | ||
339 | if (ipv6_addr_scope(&sin1->sin6_addr) == IPV6_ADDR_SCOPE_LINKLOCAL && | 339 | if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr)) |
340 | sin1->sin6_scope_id != sin2->sin6_scope_id) | ||
341 | return 0; | 340 | return 0; |
341 | else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL) | ||
342 | return sin1->sin6_scope_id == sin2->sin6_scope_id; | ||
342 | 343 | ||
343 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); | 344 | return 1; |
344 | } | 345 | } |
345 | #else /* !defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE) */ | 346 | #else /* !defined(CONFIG_IPV6) && !defined(CONFIG_IPV6_MODULE) */ |
346 | static int nfs_sockaddr_match_ipaddr6(const struct sockaddr *sa1, | 347 | static int nfs_sockaddr_match_ipaddr6(const struct sockaddr *sa1, |
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 3e93e9a1bee..693ae22f873 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
@@ -13,30 +13,6 @@ | |||
13 | 13 | ||
14 | struct idmap; | 14 | struct idmap; |
15 | 15 | ||
16 | /* | ||
17 | * In a seqid-mutating op, this macro controls which error return | ||
18 | * values trigger incrementation of the seqid. | ||
19 | * | ||
20 | * from rfc 3010: | ||
21 | * The client MUST monotonically increment the sequence number for the | ||
22 | * CLOSE, LOCK, LOCKU, OPEN, OPEN_CONFIRM, and OPEN_DOWNGRADE | ||
23 | * operations. This is true even in the event that the previous | ||
24 | * operation that used the sequence number received an error. The only | ||
25 | * exception to this rule is if the previous operation received one of | ||
26 | * the following errors: NFSERR_STALE_CLIENTID, NFSERR_STALE_STATEID, | ||
27 | * NFSERR_BAD_STATEID, NFSERR_BAD_SEQID, NFSERR_BADXDR, | ||
28 | * NFSERR_RESOURCE, NFSERR_NOFILEHANDLE. | ||
29 | * | ||
30 | */ | ||
31 | #define seqid_mutating_err(err) \ | ||
32 | (((err) != NFSERR_STALE_CLIENTID) && \ | ||
33 | ((err) != NFSERR_STALE_STATEID) && \ | ||
34 | ((err) != NFSERR_BAD_STATEID) && \ | ||
35 | ((err) != NFSERR_BAD_SEQID) && \ | ||
36 | ((err) != NFSERR_BAD_XDR) && \ | ||
37 | ((err) != NFSERR_RESOURCE) && \ | ||
38 | ((err) != NFSERR_NOFILEHANDLE)) | ||
39 | |||
40 | enum nfs4_client_state { | 16 | enum nfs4_client_state { |
41 | NFS4CLNT_MANAGER_RUNNING = 0, | 17 | NFS4CLNT_MANAGER_RUNNING = 0, |
42 | NFS4CLNT_CHECK_LEASE, | 18 | NFS4CLNT_CHECK_LEASE, |