diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-09 21:11:22 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-09 21:11:22 -0500 |
commit | e6604ecb70d4b1dbc0372c6518b51c25c4b135a1 (patch) | |
tree | 2d12c51b84c3ba8472e59ddbe37da034e2c5251f /fs/nfs/callback.c | |
parent | 9d74288ca79249af4b906215788b37d52263b58b (diff) | |
parent | 941c3ff3102ccce440034d59cf9e4e9cc10b720d (diff) |
Merge tag 'nfs-for-4.4-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"Highlights include:
New features:
- RDMA client backchannel from Chuck
- Support for NFSv4.2 file CLONE using the btrfs ioctl
Bugfixes + cleanups:
- Move socket data receive out of the bottom halves and into a
workqueue
- Refactor NFSv4 error handling so synchronous and asynchronous RPC
handles errors identically.
- Fix a panic when blocks or object layouts reads return a bad data
length
- Fix nfsroot so it can handle a 1024 byte long path.
- Fix bad usage of page offset in bl_read_pagelist
- Various NFSv4 callback cleanups+fixes
- Fix GETATTR bitmap verification
- Support hexadecimal number for sunrpc debug sysctl files"
* tag 'nfs-for-4.4-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (53 commits)
Sunrpc: Supports hexadecimal number for sysctl files of sunrpc debug
nfs: Fix GETATTR bitmap verification
nfs: Remove unused xdr page offsets in getacl/setacl arguments
fs/nfs: remove unnecessary new_valid_dev check
SUNRPC: fix variable type
NFS: Enable client side NFSv4.1 backchannel to use other transports
pNFS/flexfiles: Add support for FF_FLAGS_NO_IO_THRU_MDS
pNFS/flexfiles: When mirrored, retry failed reads by switching mirrors
SUNRPC: Remove the TCP-only restriction in bc_svc_process()
svcrdma: Add backward direction service for RPC/RDMA transport
xprtrdma: Handle incoming backward direction RPC calls
xprtrdma: Add support for sending backward direction RPC replies
xprtrdma: Pre-allocate Work Requests for backchannel
xprtrdma: Pre-allocate backward rpc_rqst and send/receive buffers
SUNRPC: Abstract backchannel operations
xprtrdma: Saving IRQs no longer needed for rb_lock
xprtrdma: Remove reply tasklet
xprtrdma: Use workqueue to process RPC/RDMA replies
xprtrdma: Replace send and receive arrays
xprtrdma: Refactor reply handler error handling
...
Diffstat (limited to 'fs/nfs/callback.c')
-rw-r--r-- | fs/nfs/callback.c | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 75f7c0a7538a..a7f2e6e33305 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -99,17 +99,6 @@ nfs4_callback_up(struct svc_serv *serv) | |||
99 | } | 99 | } |
100 | 100 | ||
101 | #if defined(CONFIG_NFS_V4_1) | 101 | #if defined(CONFIG_NFS_V4_1) |
102 | static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net) | ||
103 | { | ||
104 | /* | ||
105 | * Create an svc_sock for the back channel service that shares the | ||
106 | * fore channel connection. | ||
107 | * Returns the input port (0) and sets the svc_serv bc_xprt on success | ||
108 | */ | ||
109 | return svc_create_xprt(serv, "tcp-bc", net, PF_INET, 0, | ||
110 | SVC_SOCK_ANONYMOUS); | ||
111 | } | ||
112 | |||
113 | /* | 102 | /* |
114 | * The callback service for NFSv4.1 callbacks | 103 | * The callback service for NFSv4.1 callbacks |
115 | */ | 104 | */ |
@@ -184,11 +173,6 @@ static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt, | |||
184 | xprt->bc_serv = serv; | 173 | xprt->bc_serv = serv; |
185 | } | 174 | } |
186 | #else | 175 | #else |
187 | static int nfs41_callback_up_net(struct svc_serv *serv, struct net *net) | ||
188 | { | ||
189 | return 0; | ||
190 | } | ||
191 | |||
192 | static void nfs_minorversion_callback_svc_setup(struct svc_serv *serv, | 176 | static void nfs_minorversion_callback_svc_setup(struct svc_serv *serv, |
193 | struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) | 177 | struct svc_rqst **rqstpp, int (**callback_svc)(void *vrqstp)) |
194 | { | 178 | { |
@@ -259,7 +243,8 @@ static void nfs_callback_down_net(u32 minorversion, struct svc_serv *serv, struc | |||
259 | svc_shutdown_net(serv, net); | 243 | svc_shutdown_net(serv, net); |
260 | } | 244 | } |
261 | 245 | ||
262 | static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct net *net) | 246 | static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, |
247 | struct net *net, struct rpc_xprt *xprt) | ||
263 | { | 248 | { |
264 | struct nfs_net *nn = net_generic(net, nfs_net_id); | 249 | struct nfs_net *nn = net_generic(net, nfs_net_id); |
265 | int ret; | 250 | int ret; |
@@ -275,20 +260,11 @@ static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct n | |||
275 | goto err_bind; | 260 | goto err_bind; |
276 | } | 261 | } |
277 | 262 | ||
278 | switch (minorversion) { | 263 | ret = -EPROTONOSUPPORT; |
279 | case 0: | 264 | if (minorversion == 0) |
280 | ret = nfs4_callback_up_net(serv, net); | 265 | ret = nfs4_callback_up_net(serv, net); |
281 | break; | 266 | else if (xprt->ops->bc_up) |
282 | case 1: | 267 | ret = xprt->ops->bc_up(serv, net); |
283 | case 2: | ||
284 | ret = nfs41_callback_up_net(serv, net); | ||
285 | break; | ||
286 | default: | ||
287 | printk(KERN_ERR "NFS: unknown callback version: %d\n", | ||
288 | minorversion); | ||
289 | ret = -EINVAL; | ||
290 | break; | ||
291 | } | ||
292 | 268 | ||
293 | if (ret < 0) { | 269 | if (ret < 0) { |
294 | printk(KERN_ERR "NFS: callback service start failed\n"); | 270 | printk(KERN_ERR "NFS: callback service start failed\n"); |
@@ -364,7 +340,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt) | |||
364 | goto err_create; | 340 | goto err_create; |
365 | } | 341 | } |
366 | 342 | ||
367 | ret = nfs_callback_up_net(minorversion, serv, net); | 343 | ret = nfs_callback_up_net(minorversion, serv, net, xprt); |
368 | if (ret < 0) | 344 | if (ret < 0) |
369 | goto err_net; | 345 | goto err_net; |
370 | 346 | ||