Lines Matching refs:xprt
38 static inline int xprt_need_to_requeue(struct rpc_xprt *xprt) in xprt_need_to_requeue() argument
40 return xprt->bc_alloc_count < atomic_read(&xprt->bc_free_slots); in xprt_need_to_requeue()
43 static inline void xprt_inc_alloc_count(struct rpc_xprt *xprt, unsigned int n) in xprt_inc_alloc_count() argument
45 atomic_add(n, &xprt->bc_free_slots); in xprt_inc_alloc_count()
46 xprt->bc_alloc_count += n; in xprt_inc_alloc_count()
49 static inline int xprt_dec_alloc_count(struct rpc_xprt *xprt, unsigned int n) in xprt_dec_alloc_count() argument
51 atomic_sub(n, &xprt->bc_free_slots); in xprt_dec_alloc_count()
52 return xprt->bc_alloc_count -= n; in xprt_dec_alloc_count()
90 struct rpc_rqst *xprt_alloc_bc_req(struct rpc_xprt *xprt, gfp_t gfp_flags) in xprt_alloc_bc_req() argument
99 req->rq_xprt = xprt; in xprt_alloc_bc_req()
139 int xprt_setup_backchannel(struct rpc_xprt *xprt, unsigned int min_reqs) in xprt_setup_backchannel() argument
141 if (!xprt->ops->bc_setup) in xprt_setup_backchannel()
143 return xprt->ops->bc_setup(xprt, min_reqs); in xprt_setup_backchannel()
147 int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs) in xprt_setup_bc() argument
166 req = xprt_alloc_bc_req(xprt, GFP_KERNEL); in xprt_setup_bc()
180 spin_lock_bh(&xprt->bc_pa_lock); in xprt_setup_bc()
181 list_splice(&tmp_list, &xprt->bc_pa_list); in xprt_setup_bc()
182 xprt_inc_alloc_count(xprt, min_reqs); in xprt_setup_bc()
183 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_setup_bc()
213 void xprt_destroy_backchannel(struct rpc_xprt *xprt, unsigned int max_reqs) in xprt_destroy_backchannel() argument
215 if (xprt->ops->bc_destroy) in xprt_destroy_backchannel()
216 xprt->ops->bc_destroy(xprt, max_reqs); in xprt_destroy_backchannel()
220 void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs) in xprt_destroy_bc() argument
229 spin_lock_bh(&xprt->bc_pa_lock); in xprt_destroy_bc()
230 xprt_dec_alloc_count(xprt, max_reqs); in xprt_destroy_bc()
231 list_for_each_entry_safe(req, tmp, &xprt->bc_pa_list, rq_bc_pa_list) { in xprt_destroy_bc()
238 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_destroy_bc()
242 list_empty(&xprt->bc_pa_list) ? "true" : "false"); in xprt_destroy_bc()
245 static struct rpc_rqst *xprt_alloc_bc_request(struct rpc_xprt *xprt, __be32 xid) in xprt_alloc_bc_request() argument
250 if (atomic_read(&xprt->bc_free_slots) <= 0) in xprt_alloc_bc_request()
252 if (list_empty(&xprt->bc_pa_list)) { in xprt_alloc_bc_request()
253 req = xprt_alloc_bc_req(xprt, GFP_ATOMIC); in xprt_alloc_bc_request()
256 list_add_tail(&req->rq_bc_pa_list, &xprt->bc_pa_list); in xprt_alloc_bc_request()
257 xprt->bc_alloc_count++; in xprt_alloc_bc_request()
259 req = list_first_entry(&xprt->bc_pa_list, struct rpc_rqst, in xprt_alloc_bc_request()
266 req->rq_connect_cookie = xprt->connect_cookie; in xprt_alloc_bc_request()
278 struct rpc_xprt *xprt = req->rq_xprt; in xprt_free_bc_request() local
280 xprt->ops->bc_free_rqst(req); in xprt_free_bc_request()
285 struct rpc_xprt *xprt = req->rq_xprt; in xprt_free_bc_rqst() local
289 req->rq_connect_cookie = xprt->connect_cookie - 1; in xprt_free_bc_rqst()
298 spin_lock_bh(&xprt->bc_pa_lock); in xprt_free_bc_rqst()
299 if (xprt_need_to_requeue(xprt)) { in xprt_free_bc_rqst()
300 list_add_tail(&req->rq_bc_pa_list, &xprt->bc_pa_list); in xprt_free_bc_rqst()
301 xprt->bc_alloc_count++; in xprt_free_bc_rqst()
304 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_free_bc_rqst()
329 struct rpc_rqst *xprt_lookup_bc_request(struct rpc_xprt *xprt, __be32 xid) in xprt_lookup_bc_request() argument
333 spin_lock(&xprt->bc_pa_lock); in xprt_lookup_bc_request()
334 list_for_each_entry(req, &xprt->bc_pa_list, rq_bc_pa_list) { in xprt_lookup_bc_request()
335 if (req->rq_connect_cookie != xprt->connect_cookie) in xprt_lookup_bc_request()
340 req = xprt_alloc_bc_request(xprt, xid); in xprt_lookup_bc_request()
342 spin_unlock(&xprt->bc_pa_lock); in xprt_lookup_bc_request()
354 struct rpc_xprt *xprt = req->rq_xprt; in xprt_complete_bc_request() local
355 struct svc_serv *bc_serv = xprt->bc_serv; in xprt_complete_bc_request()
357 spin_lock(&xprt->bc_pa_lock); in xprt_complete_bc_request()
359 xprt_dec_alloc_count(xprt, 1); in xprt_complete_bc_request()
360 spin_unlock(&xprt->bc_pa_lock); in xprt_complete_bc_request()