Lines Matching refs:call

15  * Deliver reply data to a VL.GetEntryByNameU call.
17 static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call)
26 ret = afs_transfer_reply(call);
31 uvldb = call->buffer;
32 entry = call->ret_vldb;
115 struct afs_call *call;
129 call = afs_alloc_flat_call(net, &afs_RXVLGetEntryByNameU, reqsz,
131 if (!call) {
136 call->key = vc->key;
137 call->ret_vldb = entry;
138 call->max_lifespan = AFS_VL_MAX_LIFESPAN;
139 call->peer = rxrpc_kernel_get_peer(vc->alist->addrs[vc->addr_index].peer);
140 call->service_id = vc->server->service_id;
143 bp = call->request;
150 trace_afs_make_vl_call(call);
151 afs_make_call(call, GFP_KERNEL);
152 afs_wait_for_call_to_complete(call);
153 vc->call_abort_code = call->abort_code;
154 vc->call_error = call->error;
155 vc->call_responded = call->responded;
156 afs_put_call(call);
165 * Deliver reply data to a VL.GetAddrsU call.
173 static int afs_deliver_vl_get_addrs_u(struct afs_call *call)
181 call->unmarshall, iov_iter_count(call->iter), call->count);
183 switch (call->unmarshall) {
185 afs_extract_to_buf(call,
187 call->unmarshall++;
193 ret = afs_extract_data(call, true);
197 bp = call->buffer + sizeof(struct afs_uuid__xdr);
207 call->ret_alist = alist;
208 call->count = count;
209 call->count2 = nentries;
210 call->unmarshall++;
213 count = min(call->count, 4U);
214 afs_extract_to_buf(call, count * sizeof(__be32));
218 ret = afs_extract_data(call, call->count > 4);
222 alist = call->ret_alist;
223 bp = call->buffer;
224 count = min(call->count, 4U);
226 if (alist->nr_addrs < call->count2) {
227 ret = afs_merge_fs_addr4(call->net, alist, *bp++, AFS_FS_PORT);
233 call->count -= count;
234 if (call->count > 0)
236 call->unmarshall++;
264 struct afs_call *call;
271 call = afs_alloc_flat_call(net, &afs_RXVLGetAddrsU,
274 if (!call)
277 call->key = vc->key;
278 call->ret_alist = NULL;
279 call->max_lifespan = AFS_VL_MAX_LIFESPAN;
280 call->peer = rxrpc_kernel_get_peer(vc->alist->addrs[vc->addr_index].peer);
281 call->service_id = vc->server->service_id;
284 bp = call->request;
299 trace_afs_make_vl_call(call);
300 afs_make_call(call, GFP_KERNEL);
301 afs_wait_for_call_to_complete(call);
302 vc->call_abort_code = call->abort_code;
303 vc->call_error = call->error;
304 vc->call_responded = call->responded;
305 alist = call->ret_alist;
306 afs_put_call(call);
317 static int afs_deliver_vl_get_capabilities(struct afs_call *call)
323 call->unmarshall, iov_iter_count(call->iter), call->count);
325 switch (call->unmarshall) {
327 afs_extract_to_tmp(call);
328 call->unmarshall++;
332 ret = afs_extract_data(call, true);
336 count = ntohl(call->tmp);
337 call->count = count;
338 call->count2 = count;
340 call->unmarshall++;
341 afs_extract_discard(call, count * sizeof(__be32));
345 ret = afs_extract_data(call, false);
351 call->unmarshall++;
359 static void afs_destroy_vl_get_capabilities(struct afs_call *call)
361 afs_put_addrlist(call->vl_probe, afs_alist_trace_put_vlgetcaps);
362 afs_put_vlserver(call->net, call->vlserver);
363 afs_flat_call_destructor(call);
391 struct afs_call *call;
396 call = afs_alloc_flat_call(net, &afs_RXVLGetCapabilities, 1 * 4, 16 * 4);
397 if (!call)
400 call->key = key;
401 call->vlserver = afs_get_vlserver(server);
402 call->server_index = server_index;
403 call->peer = rxrpc_kernel_get_peer(alist->addrs[addr_index].peer);
404 call->vl_probe = afs_get_addrlist(alist, afs_alist_trace_get_vlgetcaps);
405 call->probe_index = addr_index;
406 call->service_id = server->service_id;
407 call->upgrade = true;
408 call->async = true;
409 call->max_lifespan = AFS_PROBE_MAX_LIFESPAN;
412 bp = call->request;
416 trace_afs_make_vl_call(call);
417 afs_make_call(call, GFP_KERNEL);
418 return call;
422 * Deliver reply data to a YFSVL.GetEndpoints call.
430 static int afs_deliver_yfsvl_get_endpoints(struct afs_call *call)
438 call->unmarshall, iov_iter_count(call->iter), call->count2);
440 switch (call->unmarshall) {
442 afs_extract_to_buf(call, sizeof(uuid_t) + 3 * sizeof(__be32));
443 call->unmarshall = 1;
450 ret = afs_extract_data(call, true);
454 bp = call->buffer + sizeof(uuid_t);
456 call->count = ntohl(*bp++);
457 call->count2 = ntohl(*bp); /* Type or next count */
459 if (call->count > YFS_MAXENDPOINTS)
460 return afs_protocol_error(call, afs_eproto_yvl_fsendpt_num);
462 alist = afs_alloc_addrlist(call->count);
466 call->ret_alist = alist;
468 if (call->count == 0)
472 switch (call->count2) {
480 return afs_protocol_error(call, afs_eproto_yvl_fsendpt_type);
484 afs_extract_to_buf(call, size);
485 call->unmarshall = 2;
489 ret = afs_extract_data(call, true);
493 alist = call->ret_alist;
494 bp = call->buffer;
495 switch (call->count2) {
499 call, afs_eproto_yvl_fsendpt4_len);
500 ret = afs_merge_fs_addr4(call->net, alist, bp[1], ntohl(bp[2]));
508 call, afs_eproto_yvl_fsendpt6_len);
509 ret = afs_merge_fs_addr6(call->net, alist, bp + 1, ntohl(bp[5]));
515 return afs_protocol_error(call, afs_eproto_yvl_fsendpt_type);
521 call->count2 = ntohl(*bp++);
523 call->count--;
524 if (call->count > 0)
529 call->count = call->count2;
530 if (!call->count)
532 if (call->count > YFS_MAXENDPOINTS)
533 return afs_protocol_error(call, afs_eproto_yvl_vlendpt_type);
535 afs_extract_to_buf(call, 1 * sizeof(__be32));
536 call->unmarshall = 3;
544 ret = afs_extract_data(call, true);
548 bp = call->buffer;
551 call->count2 = ntohl(*bp++);
552 switch (call->count2) {
560 return afs_protocol_error(call, afs_eproto_yvl_vlendpt_type);
563 if (call->count > 1)
565 afs_extract_to_buf(call, size);
566 call->unmarshall = 4;
570 ret = afs_extract_data(call, true);
574 bp = call->buffer;
575 switch (call->count2) {
579 call, afs_eproto_yvl_vlendpt4_len);
585 call, afs_eproto_yvl_vlendpt6_len);
589 return afs_protocol_error(call, afs_eproto_yvl_vlendpt_type);
595 call->count--;
596 if (call->count > 0)
600 afs_extract_discard(call, 0);
601 call->unmarshall = 5;
605 ret = afs_extract_data(call, false);
608 call->unmarshall = 6;
637 struct afs_call *call;
643 call = afs_alloc_flat_call(net, &afs_YFSVLGetEndpoints,
646 if (!call)
649 call->key = vc->key;
650 call->ret_alist = NULL;
651 call->max_lifespan = AFS_VL_MAX_LIFESPAN;
652 call->peer = rxrpc_kernel_get_peer(vc->alist->addrs[vc->addr_index].peer);
653 call->service_id = vc->server->service_id;
656 bp = call->request;
661 trace_afs_make_vl_call(call);
662 afs_make_call(call, GFP_KERNEL);
663 afs_wait_for_call_to_complete(call);
664 vc->call_abort_code = call->abort_code;
665 vc->call_error = call->error;
666 vc->call_responded = call->responded;
667 alist = call->ret_alist;
668 afs_put_call(call);
679 static int afs_deliver_yfsvl_get_cell_name(struct afs_call *call)
686 call->unmarshall, iov_iter_count(call->iter), call->count);
688 switch (call->unmarshall) {
690 afs_extract_to_tmp(call);
691 call->unmarshall++;
695 ret = afs_extract_data(call, true);
699 namesz = ntohl(call->tmp);
701 return afs_protocol_error(call, afs_eproto_cellname_len);
703 call->count = namesz;
704 call->count2 = paddedsz - namesz;
710 call->ret_str = cell_name;
712 afs_extract_begin(call, cell_name, namesz);
713 call->unmarshall++;
717 ret = afs_extract_data(call, true);
721 afs_extract_discard(call, call->count2);
722 call->unmarshall++;
726 ret = afs_extract_data(call, false);
730 call->unmarshall++;
757 struct afs_call *call;
764 call = afs_alloc_flat_call(net, &afs_YFSVLGetCellName, 1 * 4, 0);
765 if (!call)
768 call->key = vc->key;
769 call->ret_str = NULL;
770 call->max_lifespan = AFS_VL_MAX_LIFESPAN;
771 call->peer = rxrpc_kernel_get_peer(vc->alist->addrs[vc->addr_index].peer);
772 call->service_id = vc->server->service_id;
775 bp = call->request;
779 trace_afs_make_vl_call(call);
780 afs_make_call(call, GFP_KERNEL);
781 afs_wait_for_call_to_complete(call);
782 vc->call_abort_code = call->abort_code;
783 vc->call_error = call->error;
784 vc->call_responded = call->responded;
785 cellname = call->ret_str;
786 afs_put_call(call);