Lines Matching refs:rqstp

568 svc_init_buffer(struct svc_rqst *rqstp, unsigned int size, int node)  in svc_init_buffer()  argument
573 if (svc_is_backchannel(rqstp)) in svc_init_buffer()
587 rqstp->rq_pages[arghi++] = p; in svc_init_buffer()
597 svc_release_buffer(struct svc_rqst *rqstp) in svc_release_buffer() argument
601 for (i = 0; i < ARRAY_SIZE(rqstp->rq_pages); i++) in svc_release_buffer()
602 if (rqstp->rq_pages[i]) in svc_release_buffer()
603 put_page(rqstp->rq_pages[i]); in svc_release_buffer()
609 struct svc_rqst *rqstp; in svc_prepare_thread() local
611 rqstp = kzalloc_node(sizeof(*rqstp), GFP_KERNEL, node); in svc_prepare_thread()
612 if (!rqstp) in svc_prepare_thread()
616 __set_bit(RQ_BUSY, &rqstp->rq_flags); in svc_prepare_thread()
617 spin_lock_init(&rqstp->rq_lock); in svc_prepare_thread()
618 rqstp->rq_server = serv; in svc_prepare_thread()
619 rqstp->rq_pool = pool; in svc_prepare_thread()
622 list_add_rcu(&rqstp->rq_all, &pool->sp_all_threads); in svc_prepare_thread()
625 rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_prepare_thread()
626 if (!rqstp->rq_argp) in svc_prepare_thread()
629 rqstp->rq_resp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_prepare_thread()
630 if (!rqstp->rq_resp) in svc_prepare_thread()
633 if (!svc_init_buffer(rqstp, serv->sv_max_mesg, node)) in svc_prepare_thread()
636 return rqstp; in svc_prepare_thread()
638 svc_exit_thread(rqstp); in svc_prepare_thread()
681 struct svc_rqst *rqstp; in choose_victim() local
687 rqstp = list_entry(pool->sp_all_threads.next, struct svc_rqst, rq_all); in choose_victim()
688 set_bit(RQ_VICTIM, &rqstp->rq_flags); in choose_victim()
689 list_del_rcu(&rqstp->rq_all); in choose_victim()
690 task = rqstp->rq_task; in choose_victim()
714 struct svc_rqst *rqstp; in svc_set_num_threads() local
736 rqstp = svc_prepare_thread(serv, chosen_pool, node); in svc_set_num_threads()
737 if (IS_ERR(rqstp)) { in svc_set_num_threads()
738 error = PTR_ERR(rqstp); in svc_set_num_threads()
743 task = kthread_create_on_node(serv->sv_function, rqstp, in svc_set_num_threads()
748 svc_exit_thread(rqstp); in svc_set_num_threads()
752 rqstp->rq_task = task; in svc_set_num_threads()
775 svc_exit_thread(struct svc_rqst *rqstp) in svc_exit_thread() argument
777 struct svc_serv *serv = rqstp->rq_server; in svc_exit_thread()
778 struct svc_pool *pool = rqstp->rq_pool; in svc_exit_thread()
780 svc_release_buffer(rqstp); in svc_exit_thread()
781 kfree(rqstp->rq_resp); in svc_exit_thread()
782 kfree(rqstp->rq_argp); in svc_exit_thread()
783 kfree(rqstp->rq_auth_data); in svc_exit_thread()
787 if (!test_and_set_bit(RQ_VICTIM, &rqstp->rq_flags)) in svc_exit_thread()
788 list_del_rcu(&rqstp->rq_all); in svc_exit_thread()
791 kfree_rcu(rqstp, rq_rcu_head); in svc_exit_thread()
1049 void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) in svc_printk() argument
1060 dprintk("svc: %s: %pV", svc_print_addr(rqstp, buf, sizeof(buf)), &vaf); in svc_printk()
1065 static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) {} in svc_printk() argument
1072 svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) in svc_process_common() argument
1077 struct svc_serv *serv = rqstp->rq_server; in svc_process_common()
1091 set_bit(RQ_SPLICE_OK, &rqstp->rq_flags); in svc_process_common()
1093 set_bit(RQ_USEDEFERRAL, &rqstp->rq_flags); in svc_process_common()
1094 clear_bit(RQ_DROPME, &rqstp->rq_flags); in svc_process_common()
1097 rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); in svc_process_common()
1099 svc_putu32(resv, rqstp->rq_xid); in svc_process_common()
1114 rqstp->rq_prog = prog = svc_getnl(argv); /* program number */ in svc_process_common()
1115 rqstp->rq_vers = vers = svc_getnl(argv); /* version number */ in svc_process_common()
1116 rqstp->rq_proc = proc = svc_getnl(argv); /* procedure number */ in svc_process_common()
1127 auth_res = svc_authenticate(rqstp, &auth_stat); in svc_process_common()
1131 auth_res = progp->pg_authenticate(rqstp); in svc_process_common()
1144 if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) in svc_process_common()
1145 svc_close_xprt(rqstp->rq_xprt); in svc_process_common()
1162 rqstp->rq_procinfo = procp; in svc_process_common()
1175 memset(rqstp->rq_argp, 0, procp->pc_argsize); in svc_process_common()
1176 memset(rqstp->rq_resp, 0, procp->pc_ressize); in svc_process_common()
1182 svc_reserve_auth(rqstp, procp->pc_xdrressize<<2); in svc_process_common()
1188 if (xdr && !xdr(rqstp, argv->iov_base, rqstp->rq_argp)) in svc_process_common()
1191 *statp = procp->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp); in svc_process_common()
1194 if (test_bit(RQ_DROPME, &rqstp->rq_flags)) { in svc_process_common()
1196 procp->pc_release(rqstp, NULL, rqstp->rq_resp); in svc_process_common()
1201 !xdr(rqstp, resv->iov_base+resv->iov_len, rqstp->rq_resp)) { in svc_process_common()
1208 if (!versp->vs_dispatch(rqstp, statp)) { in svc_process_common()
1211 procp->pc_release(rqstp, NULL, rqstp->rq_resp); in svc_process_common()
1222 procp->pc_release(rqstp, NULL, rqstp->rq_resp); in svc_process_common()
1228 if (svc_authorise(rqstp)) in svc_process_common()
1233 svc_authorise(rqstp); /* doesn't hurt to call this twice */ in svc_process_common()
1238 svc_printk(rqstp, "short len %Zd, dropping request\n", in svc_process_common()
1255 xdr_ressize_check(rqstp, reply_statp); in svc_process_common()
1268 svc_printk(rqstp, "unknown version (%d for prog %d, %s)\n", in svc_process_common()
1278 svc_printk(rqstp, "unknown procedure (%d)\n", proc); in svc_process_common()
1285 svc_printk(rqstp, "failed to decode args\n"); in svc_process_common()
1299 svc_process(struct svc_rqst *rqstp) in svc_process() argument
1301 struct kvec *argv = &rqstp->rq_arg.head[0]; in svc_process()
1302 struct kvec *resv = &rqstp->rq_res.head[0]; in svc_process()
1303 struct svc_serv *serv = rqstp->rq_server; in svc_process()
1310 rqstp->rq_next_page = &rqstp->rq_respages[1]; in svc_process()
1311 resv->iov_base = page_address(rqstp->rq_respages[0]); in svc_process()
1313 rqstp->rq_res.pages = rqstp->rq_respages + 1; in svc_process()
1314 rqstp->rq_res.len = 0; in svc_process()
1315 rqstp->rq_res.page_base = 0; in svc_process()
1316 rqstp->rq_res.page_len = 0; in svc_process()
1317 rqstp->rq_res.buflen = PAGE_SIZE; in svc_process()
1318 rqstp->rq_res.tail[0].iov_base = NULL; in svc_process()
1319 rqstp->rq_res.tail[0].iov_len = 0; in svc_process()
1324 svc_printk(rqstp, "bad direction %d, dropping request\n", dir); in svc_process()
1330 if (likely(svc_process_common(rqstp, argv, resv))) { in svc_process()
1331 int ret = svc_send(rqstp); in svc_process()
1333 trace_svc_process(rqstp, ret); in svc_process()
1337 trace_svc_process(rqstp, 0); in svc_process()
1338 svc_drop(rqstp); in svc_process()
1349 struct svc_rqst *rqstp) in bc_svc_process() argument
1351 struct kvec *argv = &rqstp->rq_arg.head[0]; in bc_svc_process()
1352 struct kvec *resv = &rqstp->rq_res.head[0]; in bc_svc_process()
1355 rqstp->rq_xprt = serv->sv_bc_xprt; in bc_svc_process()
1356 rqstp->rq_xid = req->rq_xid; in bc_svc_process()
1357 rqstp->rq_prot = req->rq_xprt->prot; in bc_svc_process()
1358 rqstp->rq_server = serv; in bc_svc_process()
1360 rqstp->rq_addrlen = sizeof(req->rq_xprt->addr); in bc_svc_process()
1361 memcpy(&rqstp->rq_addr, &req->rq_xprt->addr, rqstp->rq_addrlen); in bc_svc_process()
1362 memcpy(&rqstp->rq_arg, &req->rq_rcv_buf, sizeof(rqstp->rq_arg)); in bc_svc_process()
1363 memcpy(&rqstp->rq_res, &req->rq_snd_buf, sizeof(rqstp->rq_res)); in bc_svc_process()
1368 if (rqstp->rq_prot != IPPROTO_TCP) { in bc_svc_process()
1381 if (svc_process_common(rqstp, argv, resv)) { in bc_svc_process()
1382 memcpy(&req->rq_snd_buf, &rqstp->rq_res, in bc_svc_process()
1397 u32 svc_max_payload(const struct svc_rqst *rqstp) in svc_max_payload() argument
1399 u32 max = rqstp->rq_xprt->xpt_class->xcl_max_payload; in svc_max_payload()
1401 if (rqstp->rq_server->sv_max_payload < max) in svc_max_payload()
1402 max = rqstp->rq_server->sv_max_payload; in svc_max_payload()