Lines Matching refs:rqstp
547 svc_init_buffer(struct svc_rqst *rqstp, unsigned int size, int node) in svc_init_buffer() argument
552 if (svc_is_backchannel(rqstp)) in svc_init_buffer()
566 rqstp->rq_pages[arghi++] = p; in svc_init_buffer()
576 svc_release_buffer(struct svc_rqst *rqstp) in svc_release_buffer() argument
580 for (i = 0; i < ARRAY_SIZE(rqstp->rq_pages); i++) in svc_release_buffer()
581 if (rqstp->rq_pages[i]) in svc_release_buffer()
582 put_page(rqstp->rq_pages[i]); in svc_release_buffer()
588 struct svc_rqst *rqstp; in svc_rqst_alloc() local
590 rqstp = kzalloc_node(sizeof(*rqstp), GFP_KERNEL, node); in svc_rqst_alloc()
591 if (!rqstp) in svc_rqst_alloc()
592 return rqstp; in svc_rqst_alloc()
594 __set_bit(RQ_BUSY, &rqstp->rq_flags); in svc_rqst_alloc()
595 spin_lock_init(&rqstp->rq_lock); in svc_rqst_alloc()
596 rqstp->rq_server = serv; in svc_rqst_alloc()
597 rqstp->rq_pool = pool; in svc_rqst_alloc()
599 rqstp->rq_argp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_rqst_alloc()
600 if (!rqstp->rq_argp) in svc_rqst_alloc()
603 rqstp->rq_resp = kmalloc_node(serv->sv_xdrsize, GFP_KERNEL, node); in svc_rqst_alloc()
604 if (!rqstp->rq_resp) in svc_rqst_alloc()
607 if (!svc_init_buffer(rqstp, serv->sv_max_mesg, node)) in svc_rqst_alloc()
610 return rqstp; in svc_rqst_alloc()
612 svc_rqst_free(rqstp); in svc_rqst_alloc()
620 struct svc_rqst *rqstp; in svc_prepare_thread() local
622 rqstp = svc_rqst_alloc(serv, pool, node); in svc_prepare_thread()
623 if (!rqstp) in svc_prepare_thread()
629 list_add_rcu(&rqstp->rq_all, &pool->sp_all_threads); in svc_prepare_thread()
631 return rqstp; in svc_prepare_thread()
672 struct svc_rqst *rqstp; in choose_victim() local
678 rqstp = list_entry(pool->sp_all_threads.next, struct svc_rqst, rq_all); in choose_victim()
679 set_bit(RQ_VICTIM, &rqstp->rq_flags); in choose_victim()
680 list_del_rcu(&rqstp->rq_all); in choose_victim()
681 task = rqstp->rq_task; in choose_victim()
705 struct svc_rqst *rqstp; in svc_set_num_threads() local
727 rqstp = svc_prepare_thread(serv, chosen_pool, node); in svc_set_num_threads()
728 if (IS_ERR(rqstp)) { in svc_set_num_threads()
729 error = PTR_ERR(rqstp); in svc_set_num_threads()
734 task = kthread_create_on_node(serv->sv_ops->svo_function, rqstp, in svc_set_num_threads()
739 svc_exit_thread(rqstp); in svc_set_num_threads()
743 rqstp->rq_task = task; in svc_set_num_threads()
766 svc_rqst_free(struct svc_rqst *rqstp) in svc_rqst_free() argument
768 svc_release_buffer(rqstp); in svc_rqst_free()
769 kfree(rqstp->rq_resp); in svc_rqst_free()
770 kfree(rqstp->rq_argp); in svc_rqst_free()
771 kfree(rqstp->rq_auth_data); in svc_rqst_free()
772 kfree_rcu(rqstp, rq_rcu_head); in svc_rqst_free()
777 svc_exit_thread(struct svc_rqst *rqstp) in svc_exit_thread() argument
779 struct svc_serv *serv = rqstp->rq_server; in svc_exit_thread()
780 struct svc_pool *pool = rqstp->rq_pool; in svc_exit_thread()
784 if (!test_and_set_bit(RQ_VICTIM, &rqstp->rq_flags)) in svc_exit_thread()
785 list_del_rcu(&rqstp->rq_all); in svc_exit_thread()
788 svc_rqst_free(rqstp); in svc_exit_thread()
1046 void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) in svc_printk() argument
1057 dprintk("svc: %s: %pV", svc_print_addr(rqstp, buf, sizeof(buf)), &vaf); in svc_printk()
1062 static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) {} in svc_printk() argument
1069 svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) in svc_process_common() argument
1074 struct svc_serv *serv = rqstp->rq_server; in svc_process_common()
1088 set_bit(RQ_SPLICE_OK, &rqstp->rq_flags); in svc_process_common()
1090 set_bit(RQ_USEDEFERRAL, &rqstp->rq_flags); in svc_process_common()
1091 clear_bit(RQ_DROPME, &rqstp->rq_flags); in svc_process_common()
1094 rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); in svc_process_common()
1096 svc_putu32(resv, rqstp->rq_xid); in svc_process_common()
1111 rqstp->rq_prog = prog = svc_getnl(argv); /* program number */ in svc_process_common()
1112 rqstp->rq_vers = vers = svc_getnl(argv); /* version number */ in svc_process_common()
1113 rqstp->rq_proc = proc = svc_getnl(argv); /* procedure number */ in svc_process_common()
1124 auth_res = svc_authenticate(rqstp, &auth_stat); in svc_process_common()
1128 auth_res = progp->pg_authenticate(rqstp); in svc_process_common()
1141 if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) in svc_process_common()
1142 svc_close_xprt(rqstp->rq_xprt); in svc_process_common()
1159 rqstp->rq_procinfo = procp; in svc_process_common()
1172 memset(rqstp->rq_argp, 0, procp->pc_argsize); in svc_process_common()
1173 memset(rqstp->rq_resp, 0, procp->pc_ressize); in svc_process_common()
1179 svc_reserve_auth(rqstp, procp->pc_xdrressize<<2); in svc_process_common()
1185 if (xdr && !xdr(rqstp, argv->iov_base, rqstp->rq_argp)) in svc_process_common()
1188 *statp = procp->pc_func(rqstp, rqstp->rq_argp, rqstp->rq_resp); in svc_process_common()
1191 if (test_bit(RQ_DROPME, &rqstp->rq_flags)) { in svc_process_common()
1193 procp->pc_release(rqstp, NULL, rqstp->rq_resp); in svc_process_common()
1198 !xdr(rqstp, resv->iov_base+resv->iov_len, rqstp->rq_resp)) { in svc_process_common()
1205 if (!versp->vs_dispatch(rqstp, statp)) { in svc_process_common()
1208 procp->pc_release(rqstp, NULL, rqstp->rq_resp); in svc_process_common()
1219 procp->pc_release(rqstp, NULL, rqstp->rq_resp); in svc_process_common()
1225 if (svc_authorise(rqstp)) in svc_process_common()
1230 svc_authorise(rqstp); /* doesn't hurt to call this twice */ in svc_process_common()
1235 svc_printk(rqstp, "short len %Zd, dropping request\n", in svc_process_common()
1252 xdr_ressize_check(rqstp, reply_statp); in svc_process_common()
1265 svc_printk(rqstp, "unknown version (%d for prog %d, %s)\n", in svc_process_common()
1275 svc_printk(rqstp, "unknown procedure (%d)\n", proc); in svc_process_common()
1282 svc_printk(rqstp, "failed to decode args\n"); in svc_process_common()
1295 svc_process(struct svc_rqst *rqstp) in svc_process() argument
1297 struct kvec *argv = &rqstp->rq_arg.head[0]; in svc_process()
1298 struct kvec *resv = &rqstp->rq_res.head[0]; in svc_process()
1299 struct svc_serv *serv = rqstp->rq_server; in svc_process()
1306 rqstp->rq_next_page = &rqstp->rq_respages[1]; in svc_process()
1307 resv->iov_base = page_address(rqstp->rq_respages[0]); in svc_process()
1309 rqstp->rq_res.pages = rqstp->rq_respages + 1; in svc_process()
1310 rqstp->rq_res.len = 0; in svc_process()
1311 rqstp->rq_res.page_base = 0; in svc_process()
1312 rqstp->rq_res.page_len = 0; in svc_process()
1313 rqstp->rq_res.buflen = PAGE_SIZE; in svc_process()
1314 rqstp->rq_res.tail[0].iov_base = NULL; in svc_process()
1315 rqstp->rq_res.tail[0].iov_len = 0; in svc_process()
1320 svc_printk(rqstp, "bad direction %d, dropping request\n", dir); in svc_process()
1326 if (likely(svc_process_common(rqstp, argv, resv))) { in svc_process()
1327 int ret = svc_send(rqstp); in svc_process()
1329 trace_svc_process(rqstp, ret); in svc_process()
1333 trace_svc_process(rqstp, 0); in svc_process()
1334 svc_drop(rqstp); in svc_process()
1346 struct svc_rqst *rqstp) in bc_svc_process() argument
1348 struct kvec *argv = &rqstp->rq_arg.head[0]; in bc_svc_process()
1349 struct kvec *resv = &rqstp->rq_res.head[0]; in bc_svc_process()
1357 rqstp->rq_xprt = serv->sv_bc_xprt; in bc_svc_process()
1358 rqstp->rq_xid = req->rq_xid; in bc_svc_process()
1359 rqstp->rq_prot = req->rq_xprt->prot; in bc_svc_process()
1360 rqstp->rq_server = serv; in bc_svc_process()
1362 rqstp->rq_addrlen = sizeof(req->rq_xprt->addr); in bc_svc_process()
1363 memcpy(&rqstp->rq_addr, &req->rq_xprt->addr, rqstp->rq_addrlen); in bc_svc_process()
1364 memcpy(&rqstp->rq_arg, &req->rq_rcv_buf, sizeof(rqstp->rq_arg)); in bc_svc_process()
1365 memcpy(&rqstp->rq_res, &req->rq_snd_buf, sizeof(rqstp->rq_res)); in bc_svc_process()
1368 rqstp->rq_arg.len = req->rq_private_buf.len; in bc_svc_process()
1369 if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len) { in bc_svc_process()
1370 rqstp->rq_arg.head[0].iov_len = rqstp->rq_arg.len; in bc_svc_process()
1371 rqstp->rq_arg.page_len = 0; in bc_svc_process()
1372 } else if (rqstp->rq_arg.len <= rqstp->rq_arg.head[0].iov_len + in bc_svc_process()
1373 rqstp->rq_arg.page_len) in bc_svc_process()
1374 rqstp->rq_arg.page_len = rqstp->rq_arg.len - in bc_svc_process()
1375 rqstp->rq_arg.head[0].iov_len; in bc_svc_process()
1377 rqstp->rq_arg.len = rqstp->rq_arg.head[0].iov_len + in bc_svc_process()
1378 rqstp->rq_arg.page_len; in bc_svc_process()
1391 proc_error = svc_process_common(rqstp, argv, resv); in bc_svc_process()
1401 memcpy(&req->rq_snd_buf, &rqstp->rq_res, sizeof(req->rq_snd_buf)); in bc_svc_process()
1422 u32 svc_max_payload(const struct svc_rqst *rqstp) in svc_max_payload() argument
1424 u32 max = rqstp->rq_xprt->xpt_class->xcl_max_payload; in svc_max_payload()
1426 if (rqstp->rq_server->sv_max_payload < max) in svc_max_payload()
1427 max = rqstp->rq_server->sv_max_payload; in svc_max_payload()