diff options
author | Kinglong Mee <kinglongmee@gmail.com> | 2014-03-23 23:59:46 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2014-03-30 10:47:36 -0400 |
commit | d531c008d7d9713456abe3d265fc577bba2e1cef (patch) | |
tree | eea8a68155e98ba647ba006d24df0efd3ecf3a49 /include/linux | |
parent | 83ddfebdd21da669918d7f9854fd592858625f4b (diff) |
NFSD/SUNRPC: Check rpc_xprt out of xs_setup_bc_tcp
Besides checking rpc_xprt out of xs_setup_bc_tcp,
increase it's reference (it's important).
Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/sunrpc/xprt.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 8097b9df6773..3e5efb2b236e 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -295,13 +295,24 @@ int xprt_adjust_timeout(struct rpc_rqst *req); | |||
295 | void xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task); | 295 | void xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task); |
296 | void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task); | 296 | void xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task); |
297 | void xprt_release(struct rpc_task *task); | 297 | void xprt_release(struct rpc_task *task); |
298 | struct rpc_xprt * xprt_get(struct rpc_xprt *xprt); | ||
299 | void xprt_put(struct rpc_xprt *xprt); | 298 | void xprt_put(struct rpc_xprt *xprt); |
300 | struct rpc_xprt * xprt_alloc(struct net *net, size_t size, | 299 | struct rpc_xprt * xprt_alloc(struct net *net, size_t size, |
301 | unsigned int num_prealloc, | 300 | unsigned int num_prealloc, |
302 | unsigned int max_req); | 301 | unsigned int max_req); |
303 | void xprt_free(struct rpc_xprt *); | 302 | void xprt_free(struct rpc_xprt *); |
304 | 303 | ||
304 | /** | ||
305 | * xprt_get - return a reference to an RPC transport. | ||
306 | * @xprt: pointer to the transport | ||
307 | * | ||
308 | */ | ||
309 | static inline struct rpc_xprt *xprt_get(struct rpc_xprt *xprt) | ||
310 | { | ||
311 | if (atomic_inc_not_zero(&xprt->count)) | ||
312 | return xprt; | ||
313 | return NULL; | ||
314 | } | ||
315 | |||
305 | static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p) | 316 | static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p) |
306 | { | 317 | { |
307 | return p + xprt->tsh_size; | 318 | return p + xprt->tsh_size; |