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()
79 struct rpc_rqst *xprt_alloc_bc_req(struct rpc_xprt *xprt, gfp_t gfp_flags) in xprt_alloc_bc_req() argument
88 req->rq_xprt = xprt; in xprt_alloc_bc_req()
127 int xprt_setup_backchannel(struct rpc_xprt *xprt, unsigned int min_reqs) in xprt_setup_backchannel() argument
129 if (!xprt->ops->bc_setup) in xprt_setup_backchannel()
131 return xprt->ops->bc_setup(xprt, min_reqs); in xprt_setup_backchannel()
135 int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs) in xprt_setup_bc() argument
157 req = xprt_alloc_bc_req(xprt, GFP_KERNEL); in xprt_setup_bc()
171 spin_lock(&xprt->bc_pa_lock); in xprt_setup_bc()
172 list_splice(&tmp_list, &xprt->bc_pa_list); in xprt_setup_bc()
173 xprt->bc_alloc_count += min_reqs; in xprt_setup_bc()
174 xprt->bc_alloc_max += min_reqs; in xprt_setup_bc()
175 atomic_add(min_reqs, &xprt->bc_slot_count); in xprt_setup_bc()
176 spin_unlock(&xprt->bc_pa_lock); in xprt_setup_bc()
206 void xprt_destroy_backchannel(struct rpc_xprt *xprt, unsigned int max_reqs) in xprt_destroy_backchannel() argument
208 if (xprt->ops->bc_destroy) in xprt_destroy_backchannel()
209 xprt->ops->bc_destroy(xprt, max_reqs); in xprt_destroy_backchannel()
213 void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs) in xprt_destroy_bc() argument
222 spin_lock_bh(&xprt->bc_pa_lock); in xprt_destroy_bc()
223 xprt->bc_alloc_max -= min(max_reqs, xprt->bc_alloc_max); in xprt_destroy_bc()
224 list_for_each_entry_safe(req, tmp, &xprt->bc_pa_list, rq_bc_pa_list) { in xprt_destroy_bc()
228 xprt->bc_alloc_count--; in xprt_destroy_bc()
229 atomic_dec(&xprt->bc_slot_count); in xprt_destroy_bc()
233 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_destroy_bc()
237 list_empty(&xprt->bc_pa_list) ? "true" : "false"); in xprt_destroy_bc()
240 static struct rpc_rqst *xprt_get_bc_request(struct rpc_xprt *xprt, __be32 xid, in xprt_get_bc_request() argument
246 if (list_empty(&xprt->bc_pa_list)) { in xprt_get_bc_request()
249 if (atomic_read(&xprt->bc_slot_count) >= BC_MAX_SLOTS) in xprt_get_bc_request()
251 list_add_tail(&new->rq_bc_pa_list, &xprt->bc_pa_list); in xprt_get_bc_request()
252 xprt->bc_alloc_count++; in xprt_get_bc_request()
253 atomic_inc(&xprt->bc_slot_count); in xprt_get_bc_request()
255 req = list_first_entry(&xprt->bc_pa_list, struct rpc_rqst, in xprt_get_bc_request()
261 req->rq_connect_cookie = xprt->connect_cookie; in xprt_get_bc_request()
273 struct rpc_xprt *xprt = req->rq_xprt; in xprt_free_bc_request() local
275 xprt->ops->bc_free_rqst(req); in xprt_free_bc_request()
280 struct rpc_xprt *xprt = req->rq_xprt; in xprt_free_bc_rqst() local
284 req->rq_connect_cookie = xprt->connect_cookie - 1; in xprt_free_bc_rqst()
293 spin_lock_bh(&xprt->bc_pa_lock); in xprt_free_bc_rqst()
294 if (xprt_need_to_requeue(xprt)) { in xprt_free_bc_rqst()
295 list_add_tail(&req->rq_bc_pa_list, &xprt->bc_pa_list); in xprt_free_bc_rqst()
296 xprt->bc_alloc_count++; in xprt_free_bc_rqst()
297 atomic_inc(&xprt->bc_slot_count); in xprt_free_bc_rqst()
300 spin_unlock_bh(&xprt->bc_pa_lock); in xprt_free_bc_rqst()
311 xprt_put(xprt); in xprt_free_bc_rqst()
325 struct rpc_rqst *xprt_lookup_bc_request(struct rpc_xprt *xprt, __be32 xid) in xprt_lookup_bc_request() argument
330 spin_lock(&xprt->bc_pa_lock); in xprt_lookup_bc_request()
331 list_for_each_entry(req, &xprt->bc_pa_list, rq_bc_pa_list) { in xprt_lookup_bc_request()
332 if (req->rq_connect_cookie != xprt->connect_cookie) in xprt_lookup_bc_request()
337 req = xprt_get_bc_request(xprt, xid, new); in xprt_lookup_bc_request()
339 spin_unlock(&xprt->bc_pa_lock); in xprt_lookup_bc_request()
346 new = xprt_alloc_bc_req(xprt, GFP_KERNEL); in xprt_lookup_bc_request()
359 struct rpc_xprt *xprt = req->rq_xprt; in xprt_complete_bc_request() local
360 struct svc_serv *bc_serv = xprt->bc_serv; in xprt_complete_bc_request()
362 spin_lock(&xprt->bc_pa_lock); in xprt_complete_bc_request()
364 xprt->bc_alloc_count--; in xprt_complete_bc_request()
365 spin_unlock(&xprt->bc_pa_lock); in xprt_complete_bc_request()
371 xprt_get(xprt); in xprt_complete_bc_request()