diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-23 11:53:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-23 11:53:47 -0400 |
commit | f63d395d47f37a4fe771e6d4b1db9d2cdae5ffc5 (patch) | |
tree | 3448a14ae965802adb963762cadeb9989ce4caa2 /fs/nfsd | |
parent | 643ac9fc5429e85b8b7f534544b80bcc4f34c367 (diff) | |
parent | 5a7c9eec9fde1da0e3adf0a4ddb64ff2a324a492 (diff) |
Merge tag 'nfs-for-3.4-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates for Linux 3.4 from Trond Myklebust:
"New features include:
- Add NFS client support for containers.
This should enable most of the necessary functionality, including
lockd support, and support for rpc.statd, NFSv4 idmapper and
RPCSEC_GSS upcalls into the correct network namespace from which
the mount system call was issued.
- NFSv4 idmapper scalability improvements
Base the idmapper cache on the keyring interface to allow
concurrent access to idmapper entries. Start the process of
migrating users from the single-threaded daemon-based approach to
the multi-threaded request-key based approach.
- NFSv4.1 implementation id.
Allows the NFSv4.1 client and server to mutually identify each
other for logging and debugging purposes.
- Support the 'vers=4.1' mount option for mounting NFSv4.1 instead of
having to use the more counterintuitive 'vers=4,minorversion=1'.
- SUNRPC tracepoints.
Start the process of adding tracepoints in order to improve
debugging of the RPC layer.
- pNFS object layout support for autologin.
Important bugfixes include:
- Fix a bug in rpc_wake_up/rpc_wake_up_status that caused them to
fail to wake up all tasks when applied to priority waitqueues.
- Ensure that we handle read delegations correctly, when we try to
truncate a file.
- A number of fixes for NFSv4 state manager loops (mostly to do with
delegation recovery)."
* tag 'nfs-for-3.4-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (224 commits)
NFS: fix sb->s_id in nfs debug prints
xprtrdma: Remove assumption that each segment is <= PAGE_SIZE
xprtrdma: The transport should not bug-check when a dup reply is received
pnfs-obj: autologin: Add support for protocol autologin
NFS: Remove nfs4_setup_sequence from generic rename code
NFS: Remove nfs4_setup_sequence from generic unlink code
NFS: Remove nfs4_setup_sequence from generic read code
NFS: Remove nfs4_setup_sequence from generic write code
NFS: Fix more NFS debug related build warnings
SUNRPC/LOCKD: Fix build warnings when CONFIG_SUNRPC_DEBUG is undefined
nfs: non void functions must return a value
SUNRPC: Kill compiler warning when RPC_DEBUG is unset
SUNRPC/NFS: Add Kbuild dependencies for NFS_DEBUG/RPC_DEBUG
NFS: Use cond_resched_lock() to reduce latencies in the commit scans
NFSv4: It is not safe to dereference lsp->ls_state in release_lockowner
NFS: ncommit count is being double decremented
SUNRPC: We must not use list_for_each_entry_safe() in rpc_wake_up()
Try using machine credentials for RENEW calls
NFSv4.1: Fix a few issues in filelayout_commit_pagelist
NFSv4.1: Clean ups and bugfixes for the pNFS read/writeback/commit code
...
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4callback.c | 8 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 2 | ||||
-rw-r--r-- | fs/nfsd/nfsctl.c | 6 | ||||
-rw-r--r-- | fs/nfsd/nfssvc.c | 4 | ||||
-rw-r--r-- | fs/nfsd/stats.c | 5 |
5 files changed, 13 insertions, 12 deletions
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 6f3ebb48b12f..0e262f32ac41 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c | |||
@@ -605,24 +605,24 @@ static struct rpc_version nfs_cb_version4 = { | |||
605 | .procs = nfs4_cb_procedures | 605 | .procs = nfs4_cb_procedures |
606 | }; | 606 | }; |
607 | 607 | ||
608 | static struct rpc_version *nfs_cb_version[] = { | 608 | static const struct rpc_version *nfs_cb_version[] = { |
609 | &nfs_cb_version4, | 609 | &nfs_cb_version4, |
610 | }; | 610 | }; |
611 | 611 | ||
612 | static struct rpc_program cb_program; | 612 | static const struct rpc_program cb_program; |
613 | 613 | ||
614 | static struct rpc_stat cb_stats = { | 614 | static struct rpc_stat cb_stats = { |
615 | .program = &cb_program | 615 | .program = &cb_program |
616 | }; | 616 | }; |
617 | 617 | ||
618 | #define NFS4_CALLBACK 0x40000000 | 618 | #define NFS4_CALLBACK 0x40000000 |
619 | static struct rpc_program cb_program = { | 619 | static const struct rpc_program cb_program = { |
620 | .name = "nfs4_cb", | 620 | .name = "nfs4_cb", |
621 | .number = NFS4_CALLBACK, | 621 | .number = NFS4_CALLBACK, |
622 | .nrvers = ARRAY_SIZE(nfs_cb_version), | 622 | .nrvers = ARRAY_SIZE(nfs_cb_version), |
623 | .version = nfs_cb_version, | 623 | .version = nfs_cb_version, |
624 | .stats = &cb_stats, | 624 | .stats = &cb_stats, |
625 | .pipe_dir_name = "/nfsd4_cb", | 625 | .pipe_dir_name = "nfsd4_cb", |
626 | }; | 626 | }; |
627 | 627 | ||
628 | static int max_cb_time(void) | 628 | static int max_cb_time(void) |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index e8c98f009670..c5cddd659429 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -1308,7 +1308,7 @@ gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_r | |||
1308 | else | 1308 | else |
1309 | goto out_err; | 1309 | goto out_err; |
1310 | 1310 | ||
1311 | conn->cb_addrlen = rpc_uaddr2sockaddr(se->se_callback_addr_val, | 1311 | conn->cb_addrlen = rpc_uaddr2sockaddr(&init_net, se->se_callback_addr_val, |
1312 | se->se_callback_addr_len, | 1312 | se->se_callback_addr_len, |
1313 | (struct sockaddr *)&conn->cb_addr, | 1313 | (struct sockaddr *)&conn->cb_addr, |
1314 | sizeof(conn->cb_addr)); | 1314 | sizeof(conn->cb_addr)); |
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index 748eda93ce59..64c24af8d7ea 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c | |||
@@ -223,7 +223,7 @@ static ssize_t write_unlock_ip(struct file *file, char *buf, size_t size) | |||
223 | if (qword_get(&buf, fo_path, size) < 0) | 223 | if (qword_get(&buf, fo_path, size) < 0) |
224 | return -EINVAL; | 224 | return -EINVAL; |
225 | 225 | ||
226 | if (rpc_pton(fo_path, size, sap, salen) == 0) | 226 | if (rpc_pton(&init_net, fo_path, size, sap, salen) == 0) |
227 | return -EINVAL; | 227 | return -EINVAL; |
228 | 228 | ||
229 | return nlmsvc_unlock_all_by_ip(sap); | 229 | return nlmsvc_unlock_all_by_ip(sap); |
@@ -722,7 +722,7 @@ static ssize_t __write_ports_addxprt(char *buf) | |||
722 | nfsd_serv->sv_nrthreads--; | 722 | nfsd_serv->sv_nrthreads--; |
723 | return 0; | 723 | return 0; |
724 | out_close: | 724 | out_close: |
725 | xprt = svc_find_xprt(nfsd_serv, transport, PF_INET, port); | 725 | xprt = svc_find_xprt(nfsd_serv, transport, &init_net, PF_INET, port); |
726 | if (xprt != NULL) { | 726 | if (xprt != NULL) { |
727 | svc_close_xprt(xprt); | 727 | svc_close_xprt(xprt); |
728 | svc_xprt_put(xprt); | 728 | svc_xprt_put(xprt); |
@@ -748,7 +748,7 @@ static ssize_t __write_ports_delxprt(char *buf) | |||
748 | if (port < 1 || port > USHRT_MAX || nfsd_serv == NULL) | 748 | if (port < 1 || port > USHRT_MAX || nfsd_serv == NULL) |
749 | return -EINVAL; | 749 | return -EINVAL; |
750 | 750 | ||
751 | xprt = svc_find_xprt(nfsd_serv, transport, AF_UNSPEC, port); | 751 | xprt = svc_find_xprt(nfsd_serv, transport, &init_net, AF_UNSPEC, port); |
752 | if (xprt == NULL) | 752 | if (xprt == NULL) |
753 | return -ENOTCONN; | 753 | return -ENOTCONN; |
754 | 754 | ||
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index eda7d7e55e05..fce472f5f39e 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -251,13 +251,13 @@ static void nfsd_shutdown(void) | |||
251 | nfsd_up = false; | 251 | nfsd_up = false; |
252 | } | 252 | } |
253 | 253 | ||
254 | static void nfsd_last_thread(struct svc_serv *serv) | 254 | static void nfsd_last_thread(struct svc_serv *serv, struct net *net) |
255 | { | 255 | { |
256 | /* When last nfsd thread exits we need to do some clean-up */ | 256 | /* When last nfsd thread exits we need to do some clean-up */ |
257 | nfsd_serv = NULL; | 257 | nfsd_serv = NULL; |
258 | nfsd_shutdown(); | 258 | nfsd_shutdown(); |
259 | 259 | ||
260 | svc_rpcb_cleanup(serv); | 260 | svc_rpcb_cleanup(serv, net); |
261 | 261 | ||
262 | printk(KERN_WARNING "nfsd: last server has exited, flushing export " | 262 | printk(KERN_WARNING "nfsd: last server has exited, flushing export " |
263 | "cache\n"); | 263 | "cache\n"); |
diff --git a/fs/nfsd/stats.c b/fs/nfsd/stats.c index a2e2402b2afb..6d4521feb6e3 100644 --- a/fs/nfsd/stats.c +++ b/fs/nfsd/stats.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/sunrpc/stats.h> | 26 | #include <linux/sunrpc/stats.h> |
27 | #include <linux/nfsd/stats.h> | 27 | #include <linux/nfsd/stats.h> |
28 | #include <net/net_namespace.h> | ||
28 | 29 | ||
29 | #include "nfsd.h" | 30 | #include "nfsd.h" |
30 | 31 | ||
@@ -94,11 +95,11 @@ static const struct file_operations nfsd_proc_fops = { | |||
94 | void | 95 | void |
95 | nfsd_stat_init(void) | 96 | nfsd_stat_init(void) |
96 | { | 97 | { |
97 | svc_proc_register(&nfsd_svcstats, &nfsd_proc_fops); | 98 | svc_proc_register(&init_net, &nfsd_svcstats, &nfsd_proc_fops); |
98 | } | 99 | } |
99 | 100 | ||
100 | void | 101 | void |
101 | nfsd_stat_shutdown(void) | 102 | nfsd_stat_shutdown(void) |
102 | { | 103 | { |
103 | svc_proc_unregister("nfsd"); | 104 | svc_proc_unregister(&init_net, "nfsd"); |
104 | } | 105 | } |