Lines Matching refs:xprt
36 unsigned int xprt_bc_max_slots(struct rpc_xprt *xprt) in xprt_bc_max_slots() argument
45 static inline int xprt_need_to_requeue(struct rpc_xprt *xprt) in xprt_need_to_requeue() argument
47 return xprt->bc_alloc_count < xprt->bc_alloc_max; in xprt_need_to_requeue()
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()
138 int xprt_setup_backchannel(struct rpc_xprt *xprt, unsigned int min_reqs) in xprt_setup_backchannel() argument
140 if (!xprt->ops->bc_setup) in xprt_setup_backchannel()
142 return xprt->ops->bc_setup(xprt, min_reqs); in xprt_setup_backchannel()
146 int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs) in xprt_setup_bc() argument
168 req = xprt_alloc_bc_req(xprt, GFP_KERNEL); in xprt_setup_bc()
182 spin_lock(&xprt->bc_pa_lock); in xprt_setup_bc()
183 list_splice(&tmp_list, &xprt->bc_pa_list); in xprt_setup_bc()
184 xprt->bc_alloc_count += min_reqs; in xprt_setup_bc()
185 xprt->bc_alloc_max += min_reqs; in xprt_setup_bc()
186 atomic_add(min_reqs, &xprt->bc_slot_count); in xprt_setup_bc()
187 spin_unlock(&xprt->bc_pa_lock); in xprt_setup_bc()
217 void xprt_destroy_backchannel(struct rpc_xprt *xprt, unsigned int max_reqs) in xprt_destroy_backchannel() argument
219 if (xprt->ops->bc_destroy) in xprt_destroy_backchannel()
220 xprt->ops->bc_destroy(xprt, max_reqs); in xprt_destroy_backchannel()
224 void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs) in xprt_destroy_bc() argument
233 spin_lock_bh(&xprt->bc_pa_lock); in xprt_destroy_bc()
234 xprt->bc_alloc_max -= min(max_reqs, xprt->bc_alloc_max); in xprt_destroy_bc()
235 list_for_each_entry_safe(req, tmp, &xprt->bc_pa_list, rq_bc_pa_list) { in xprt_destroy_bc()
239 xprt->bc_alloc_count--; in xprt_destroy_bc()
240 atomic_dec(&xprt->bc_slot_count); in xprt_destroy_bc()
244 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_destroy_bc()
248 list_empty(&xprt->bc_pa_list) ? "true" : "false"); in xprt_destroy_bc()
251 static struct rpc_rqst *xprt_get_bc_request(struct rpc_xprt *xprt, __be32 xid, in xprt_get_bc_request() argument
257 if (list_empty(&xprt->bc_pa_list)) { in xprt_get_bc_request()
260 if (atomic_read(&xprt->bc_slot_count) >= BC_MAX_SLOTS) in xprt_get_bc_request()
262 list_add_tail(&new->rq_bc_pa_list, &xprt->bc_pa_list); in xprt_get_bc_request()
263 xprt->bc_alloc_count++; in xprt_get_bc_request()
264 atomic_inc(&xprt->bc_slot_count); in xprt_get_bc_request()
266 req = list_first_entry(&xprt->bc_pa_list, struct rpc_rqst, in xprt_get_bc_request()
272 req->rq_connect_cookie = xprt->connect_cookie; in xprt_get_bc_request()
284 struct rpc_xprt *xprt = req->rq_xprt; in xprt_free_bc_request() local
286 xprt->ops->bc_free_rqst(req); in xprt_free_bc_request()
291 struct rpc_xprt *xprt = req->rq_xprt; in xprt_free_bc_rqst() local
295 req->rq_connect_cookie = xprt->connect_cookie - 1; in xprt_free_bc_rqst()
304 spin_lock_bh(&xprt->bc_pa_lock); in xprt_free_bc_rqst()
305 if (xprt_need_to_requeue(xprt)) { in xprt_free_bc_rqst()
309 list_add_tail(&req->rq_bc_pa_list, &xprt->bc_pa_list); in xprt_free_bc_rqst()
310 xprt->bc_alloc_count++; in xprt_free_bc_rqst()
311 atomic_inc(&xprt->bc_slot_count); in xprt_free_bc_rqst()
314 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_free_bc_rqst()
325 xprt_put(xprt); in xprt_free_bc_rqst()
339 struct rpc_rqst *xprt_lookup_bc_request(struct rpc_xprt *xprt, __be32 xid) in xprt_lookup_bc_request() argument
344 spin_lock(&xprt->bc_pa_lock); in xprt_lookup_bc_request()
345 list_for_each_entry(req, &xprt->bc_pa_list, rq_bc_pa_list) { in xprt_lookup_bc_request()
346 if (req->rq_connect_cookie != xprt->connect_cookie) in xprt_lookup_bc_request()
351 req = xprt_get_bc_request(xprt, xid, new); in xprt_lookup_bc_request()
353 spin_unlock(&xprt->bc_pa_lock); in xprt_lookup_bc_request()
360 new = xprt_alloc_bc_req(xprt, GFP_KERNEL); in xprt_lookup_bc_request()
373 struct rpc_xprt *xprt = req->rq_xprt; in xprt_complete_bc_request() local
374 struct svc_serv *bc_serv = xprt->bc_serv; in xprt_complete_bc_request()
376 spin_lock(&xprt->bc_pa_lock); in xprt_complete_bc_request()
378 xprt->bc_alloc_count--; in xprt_complete_bc_request()
379 spin_unlock(&xprt->bc_pa_lock); in xprt_complete_bc_request()
385 xprt_get(xprt); in xprt_complete_bc_request()