diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-11 20:14:54 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-11 20:14:54 -0500 |
| commit | 6f83e5bd3e96228ee0caff0b103addb5f4e95459 (patch) | |
| tree | bf27fcc754ea8c5287088df2803edbfb3c70f716 | |
| parent | 73b4f63aebd6d57db4ca1d31fa6f8516651207b0 (diff) | |
| parent | c627d31ba0696cbd829437af2be2f2dee3546b1e (diff) | |
Merge tag 'nfs-for-3.20-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"Highlights incluse:
Features:
- Removing the forced serialisation of open()/close() calls in
NFSv4.x (x>0) makes for a significant performance improvement in
metadata intensive workloads.
- Full support for the pNFS "flexible files" layout type
- Further RPC/RDMA client improvements from Chuck
Bugfixes:
- Stable fix: NFSv4.1 backchannel calls blocking operations with !TASK_RUNNING
- Stable fix: pnfs_generic_pg_init_read/write can be called with lseg == NULL
- Stable fix: Fix an Oopsable condition when nsm_mon_unmon is called
as part of the namespace cleanup,
- Stable fix: Ensure we reference the inode for return-on-close in
delegreturn
- Use SO_REUSEPORT to ensure that NFSv3 TCP connections can rebind to
the same source address/port combination during a disconnect/
reconnect event. This is a requirement imposed by most NFSv3
server duplicate reply cache implementations.
Optimisations:
- Ask for no NFSv4.1 delegations on OPEN if using O_DIRECT
Other:
- Add Anna Schumaker as co-maintainer for the NFS client"
* tag 'nfs-for-3.20-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (119 commits)
SUNRPC: Cleanup to remove xs_tcp_close()
pnfs: delete an unintended goto
pnfs/flexfiles: Do not dprintk after the free
SUNRPC: Fix stupid typo in xs_sock_set_reuseport
SUNRPC: Define xs_tcp_fin_timeout only if CONFIG_SUNRPC_DEBUG
SUNRPC: Handle connection reset more efficiently.
SUNRPC: Remove the redundant XPRT_CONNECTION_CLOSE flag
SUNRPC: Make xs_tcp_close() do a socket shutdown rather than a sock_release
SUNRPC: Ensure xs_tcp_shutdown() requests a full close of the connection
SUNRPC: Cleanup to remove remaining uses of XPRT_CONNECTION_ABORT
SUNRPC: Remove TCP socket linger code
SUNRPC: Remove TCP client connection reset hack
SUNRPC: TCP/UDP always close the old socket before reconnecting
SUNRPC: Add helpers to prevent socket create from racing
SUNRPC: Ensure xs_reset_transport() resets the close connection flags
SUNRPC: Do not clear the source port in xs_reset_transport
SUNRPC: Handle EADDRINUSE on connect
SUNRPC: Set SO_REUSEPORT socket option for TCP connections
NFSv4.1: Fix pnfs_put_lseg races
NFSv4.1: pnfs_send_layoutreturn should use GFP_NOFS
...
60 files changed, 5236 insertions, 1729 deletions
diff --git a/Documentation/filesystems/nfs/pnfs.txt b/Documentation/filesystems/nfs/pnfs.txt index adc81a35fe2d..44a9f2493a88 100644 --- a/Documentation/filesystems/nfs/pnfs.txt +++ b/Documentation/filesystems/nfs/pnfs.txt | |||
| @@ -57,15 +57,16 @@ bit is set, preventing any new lsegs from being added. | |||
| 57 | layout drivers | 57 | layout drivers |
| 58 | -------------- | 58 | -------------- |
| 59 | 59 | ||
| 60 | PNFS utilizes what is called layout drivers. The STD defines 3 basic | 60 | PNFS utilizes what is called layout drivers. The STD defines 4 basic |
| 61 | layout types: "files" "objects" and "blocks". For each of these types | 61 | layout types: "files", "objects", "blocks", and "flexfiles". For each |
| 62 | there is a layout-driver with a common function-vectors table which | 62 | of these types there is a layout-driver with a common function-vectors |
| 63 | are called by the nfs-client pnfs-core to implement the different layout | 63 | table which are called by the nfs-client pnfs-core to implement the |
| 64 | types. | 64 | different layout types. |
| 65 | 65 | ||
| 66 | Files-layout-driver code is in: fs/nfs/nfs4filelayout.c && nfs4filelayoutdev.c | 66 | Files-layout-driver code is in: fs/nfs/filelayout/.. directory |
| 67 | Objects-layout-deriver code is in: fs/nfs/objlayout/.. directory | 67 | Objects-layout-deriver code is in: fs/nfs/objlayout/.. directory |
| 68 | Blocks-layout-deriver code is in: fs/nfs/blocklayout/.. directory | 68 | Blocks-layout-deriver code is in: fs/nfs/blocklayout/.. directory |
| 69 | Flexfiles-layout-driver code is in: fs/nfs/flexfilelayout/.. directory | ||
| 69 | 70 | ||
| 70 | objects-layout setup | 71 | objects-layout setup |
| 71 | -------------------- | 72 | -------------------- |
diff --git a/MAINTAINERS b/MAINTAINERS index cc66549dd761..37c10098a627 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -6777,6 +6777,7 @@ F: Documentation/devicetree/bindings/net/nfc/ | |||
| 6777 | 6777 | ||
| 6778 | NFS, SUNRPC, AND LOCKD CLIENTS | 6778 | NFS, SUNRPC, AND LOCKD CLIENTS |
| 6779 | M: Trond Myklebust <trond.myklebust@primarydata.com> | 6779 | M: Trond Myklebust <trond.myklebust@primarydata.com> |
| 6780 | M: Anna Schumaker <anna.schumaker@netapp.com> | ||
| 6780 | L: linux-nfs@vger.kernel.org | 6781 | L: linux-nfs@vger.kernel.org |
| 6781 | W: http://client.linux-nfs.org | 6782 | W: http://client.linux-nfs.org |
| 6782 | T: git git://git.linux-nfs.org/projects/trondmy/linux-nfs.git | 6783 | T: git git://git.linux-nfs.org/projects/trondmy/linux-nfs.git |
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index 1cc6ec51e6b1..47a32b6d9b90 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c | |||
| @@ -65,7 +65,7 @@ static inline struct sockaddr *nsm_addr(const struct nsm_handle *nsm) | |||
| 65 | return (struct sockaddr *)&nsm->sm_addr; | 65 | return (struct sockaddr *)&nsm->sm_addr; |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static struct rpc_clnt *nsm_create(struct net *net) | 68 | static struct rpc_clnt *nsm_create(struct net *net, const char *nodename) |
| 69 | { | 69 | { |
| 70 | struct sockaddr_in sin = { | 70 | struct sockaddr_in sin = { |
| 71 | .sin_family = AF_INET, | 71 | .sin_family = AF_INET, |
| @@ -77,6 +77,7 @@ static struct rpc_clnt *nsm_create(struct net *net) | |||
| 77 | .address = (struct sockaddr *)&sin, | 77 | .address = (struct sockaddr *)&sin, |
| 78 | .addrsize = sizeof(sin), | 78 | .addrsize = sizeof(sin), |
| 79 | .servername = "rpc.statd", | 79 | .servername = "rpc.statd", |
| 80 | .nodename = nodename, | ||
| 80 | .program = &nsm_program, | 81 | .program = &nsm_program, |
| 81 | .version = NSM_VERSION, | 82 | .version = NSM_VERSION, |
| 82 | .authflavor = RPC_AUTH_NULL, | 83 | .authflavor = RPC_AUTH_NULL, |
| @@ -102,7 +103,7 @@ out: | |||
| 102 | return clnt; | 103 | return clnt; |
| 103 | } | 104 | } |
| 104 | 105 | ||
| 105 | static struct rpc_clnt *nsm_client_get(struct net *net) | 106 | static struct rpc_clnt *nsm_client_get(struct net *net, const char *nodename) |
| 106 | { | 107 | { |
| 107 | struct rpc_clnt *clnt, *new; | 108 | struct rpc_clnt *clnt, *new; |
| 108 | struct lockd_net *ln = net_generic(net, lockd_net_id); | 109 | struct lockd_net *ln = net_generic(net, lockd_net_id); |
| @@ -111,7 +112,7 @@ static struct rpc_clnt *nsm_client_get(struct net *net) | |||
| 111 | if (clnt != NULL) | 112 | if (clnt != NULL) |
| 112 | goto out; | 113 | goto out; |
| 113 | 114 | ||
| 114 | clnt = new = nsm_create(net); | 115 | clnt = new = nsm_create(net, nodename); |
| 115 | if (IS_ERR(clnt)) | 116 | if (IS_ERR(clnt)) |
| 116 | goto out; | 117 | goto out; |
| 117 | 118 | ||
| @@ -190,19 +191,23 @@ int nsm_monitor(const struct nlm_host *host) | |||
| 190 | struct nsm_res res; | 191 | struct nsm_res res; |
| 191 | int status; | 192 | int status; |
| 192 | struct rpc_clnt *clnt; | 193 | struct rpc_clnt *clnt; |
| 194 | const char *nodename = NULL; | ||
| 193 | |||
