Lines Matching full:call
19 * Deliver reply data to a VL.GetEntryByNameU call.
21 static int afs_deliver_vl_get_entry_by_name_u(struct afs_call *call) in afs_deliver_vl_get_entry_by_name_u() argument
31 ret = afs_transfer_reply(call); in afs_deliver_vl_get_entry_by_name_u()
36 uvldb = call->buffer; in afs_deliver_vl_get_entry_by_name_u()
37 entry = call->reply[0]; in afs_deliver_vl_get_entry_by_name_u()
112 static void afs_destroy_vl_get_entry_by_name_u(struct afs_call *call) in afs_destroy_vl_get_entry_by_name_u() argument
114 kfree(call->reply[0]); in afs_destroy_vl_get_entry_by_name_u()
115 afs_flat_call_destructor(call); in afs_destroy_vl_get_entry_by_name_u()
139 struct afs_call *call; in afs_vl_get_entry_by_name_u() local
152 call = afs_alloc_flat_call(net, &afs_RXVLGetEntryByNameU, reqsz, in afs_vl_get_entry_by_name_u()
154 if (!call) { in afs_vl_get_entry_by_name_u()
159 call->key = key; in afs_vl_get_entry_by_name_u()
160 call->reply[0] = entry; in afs_vl_get_entry_by_name_u()
161 call->ret_reply0 = true; in afs_vl_get_entry_by_name_u()
164 bp = call->request; in afs_vl_get_entry_by_name_u()
171 trace_afs_make_vl_call(call); in afs_vl_get_entry_by_name_u()
172 return (struct afs_vldb_entry *)afs_make_call(ac, call, GFP_KERNEL, false); in afs_vl_get_entry_by_name_u()
176 * Deliver reply data to a VL.GetAddrsU call.
184 static int afs_deliver_vl_get_addrs_u(struct afs_call *call) in afs_deliver_vl_get_addrs_u() argument
191 _enter("{%u,%zu/%u}", call->unmarshall, call->offset, call->count); in afs_deliver_vl_get_addrs_u()
194 switch (call->unmarshall) { in afs_deliver_vl_get_addrs_u()
196 call->offset = 0; in afs_deliver_vl_get_addrs_u()
197 call->unmarshall++; in afs_deliver_vl_get_addrs_u()
201 ret = afs_extract_data(call, call->buffer, in afs_deliver_vl_get_addrs_u()
207 bp = call->buffer + sizeof(struct afs_uuid__xdr); in afs_deliver_vl_get_addrs_u()
217 call->reply[0] = alist; in afs_deliver_vl_get_addrs_u()
218 call->count = count; in afs_deliver_vl_get_addrs_u()
219 call->count2 = nentries; in afs_deliver_vl_get_addrs_u()
220 call->offset = 0; in afs_deliver_vl_get_addrs_u()
221 call->unmarshall++; in afs_deliver_vl_get_addrs_u()
225 count = min(call->count, 4U); in afs_deliver_vl_get_addrs_u()
226 ret = afs_extract_data(call, call->buffer, in afs_deliver_vl_get_addrs_u()
228 call->count > 4); in afs_deliver_vl_get_addrs_u()
232 alist = call->reply[0]; in afs_deliver_vl_get_addrs_u()
233 bp = call->buffer; in afs_deliver_vl_get_addrs_u()
235 if (alist->nr_addrs < call->count2) in afs_deliver_vl_get_addrs_u()
238 call->count -= count; in afs_deliver_vl_get_addrs_u()
239 if (call->count > 0) in afs_deliver_vl_get_addrs_u()
241 call->offset = 0; in afs_deliver_vl_get_addrs_u()
242 call->unmarshall++; in afs_deliver_vl_get_addrs_u()
250 static void afs_vl_get_addrs_u_destructor(struct afs_call *call) in afs_vl_get_addrs_u_destructor() argument
252 afs_put_server(call->net, (struct afs_server *)call->reply[0]); in afs_vl_get_addrs_u_destructor()
253 kfree(call->reply[1]); in afs_vl_get_addrs_u_destructor()
254 return afs_flat_call_destructor(call); in afs_vl_get_addrs_u_destructor()
278 struct afs_call *call; in afs_vl_get_addrs_u() local
284 call = afs_alloc_flat_call(net, &afs_RXVLGetAddrsU, in afs_vl_get_addrs_u()
287 if (!call) in afs_vl_get_addrs_u()
290 call->key = key; in afs_vl_get_addrs_u()
291 call->reply[0] = NULL; in afs_vl_get_addrs_u()
292 call->ret_reply0 = true; in afs_vl_get_addrs_u()
295 bp = call->request; in afs_vl_get_addrs_u()
310 trace_afs_make_vl_call(call); in afs_vl_get_addrs_u()
311 return (struct afs_addr_list *)afs_make_call(ac, call, GFP_KERNEL, false); in afs_vl_get_addrs_u()
317 static int afs_deliver_vl_get_capabilities(struct afs_call *call) in afs_deliver_vl_get_capabilities() argument
322 _enter("{%u,%zu/%u}", call->unmarshall, call->offset, call->count); in afs_deliver_vl_get_capabilities()
325 switch (call->unmarshall) { in afs_deliver_vl_get_capabilities()
327 call->offset = 0; in afs_deliver_vl_get_capabilities()
328 call->unmarshall++; in afs_deliver_vl_get_capabilities()
332 ret = afs_extract_data(call, &call->tmp, in afs_deliver_vl_get_capabilities()
338 count = ntohl(call->tmp); in afs_deliver_vl_get_capabilities()
340 call->count = count; in afs_deliver_vl_get_capabilities()
341 call->count2 = count; in afs_deliver_vl_get_capabilities()
342 call->offset = 0; in afs_deliver_vl_get_capabilities()
343 call->unmarshall++; in afs_deliver_vl_get_capabilities()
347 count = min(call->count, 16U); in afs_deliver_vl_get_capabilities()
348 ret = afs_extract_data(call, call->buffer, in afs_deliver_vl_get_capabilities()
350 call->count > 16); in afs_deliver_vl_get_capabilities()
356 call->count -= count; in afs_deliver_vl_get_capabilities()
357 if (call->count > 0) in afs_deliver_vl_get_capabilities()
359 call->offset = 0; in afs_deliver_vl_get_capabilities()
360 call->unmarshall++; in afs_deliver_vl_get_capabilities()
364 call->reply[0] = (void *)(unsigned long)call->service_id; in afs_deliver_vl_get_capabilities()
391 struct afs_call *call; in afs_vl_get_capabilities() local
396 call = afs_alloc_flat_call(net, &afs_RXVLGetCapabilities, 1 * 4, 16 * 4); in afs_vl_get_capabilities()
397 if (!call) in afs_vl_get_capabilities()
400 call->key = key; in afs_vl_get_capabilities()
401 call->upgrade = true; /* Let's see if this is a YFS server */ in afs_vl_get_capabilities()
402 call->reply[0] = (void *)VLGETCAPABILITIES; in afs_vl_get_capabilities()
403 call->ret_reply0 = true; in afs_vl_get_capabilities()
406 bp = call->request; in afs_vl_get_capabilities()
410 trace_afs_make_vl_call(call); in afs_vl_get_capabilities()
411 return afs_make_call(ac, call, GFP_KERNEL, false); in afs_vl_get_capabilities()
415 * Deliver reply data to a YFSVL.GetEndpoints call.
423 static int afs_deliver_yfsvl_get_endpoints(struct afs_call *call) in afs_deliver_yfsvl_get_endpoints() argument
430 _enter("{%u,%zu/%u,%u}", call->unmarshall, call->offset, call->count, call->count2); in afs_deliver_yfsvl_get_endpoints()
433 switch (call->unmarshall) { in afs_deliver_yfsvl_get_endpoints()
435 call->offset = 0; in afs_deliver_yfsvl_get_endpoints()
436 call->unmarshall = 1; in afs_deliver_yfsvl_get_endpoints()
442 ret = afs_extract_data(call, call->buffer, in afs_deliver_yfsvl_get_endpoints()
449 bp = call->buffer + sizeof(uuid_t); in afs_deliver_yfsvl_get_endpoints()
451 call->count = ntohl(*bp++); in afs_deliver_yfsvl_get_endpoints()
452 call->count2 = ntohl(*bp); /* Type or next count */ in afs_deliver_yfsvl_get_endpoints()
454 if (call->count > YFS_MAXENDPOINTS) in afs_deliver_yfsvl_get_endpoints()
455 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
457 alist = afs_alloc_addrlist(call->count, FS_SERVICE, AFS_FS_PORT); in afs_deliver_yfsvl_get_endpoints()
461 call->reply[0] = alist; in afs_deliver_yfsvl_get_endpoints()
462 call->offset = 0; in afs_deliver_yfsvl_get_endpoints()
464 if (call->count == 0) in afs_deliver_yfsvl_get_endpoints()
467 call->unmarshall = 2; in afs_deliver_yfsvl_get_endpoints()
471 switch (call->count2) { in afs_deliver_yfsvl_get_endpoints()
479 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
483 ret = afs_extract_data(call, call->buffer, size, true); in afs_deliver_yfsvl_get_endpoints()
487 alist = call->reply[0]; in afs_deliver_yfsvl_get_endpoints()
488 bp = call->buffer; in afs_deliver_yfsvl_get_endpoints()
489 switch (call->count2) { in afs_deliver_yfsvl_get_endpoints()
492 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
498 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
503 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
509 call->count2 = ntohl(*bp++); in afs_deliver_yfsvl_get_endpoints()
511 call->offset = 0; in afs_deliver_yfsvl_get_endpoints()
512 call->count--; in afs_deliver_yfsvl_get_endpoints()
513 if (call->count > 0) in afs_deliver_yfsvl_get_endpoints()
518 call->count = call->count2; in afs_deliver_yfsvl_get_endpoints()
519 if (!call->count) in afs_deliver_yfsvl_get_endpoints()
521 if (call->count > YFS_MAXENDPOINTS) in afs_deliver_yfsvl_get_endpoints()
522 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
524 call->unmarshall = 3; in afs_deliver_yfsvl_get_endpoints()
531 ret = afs_extract_data(call, call->buffer, sizeof(__be32), true); in afs_deliver_yfsvl_get_endpoints()
535 bp = call->buffer; in afs_deliver_yfsvl_get_endpoints()
536 call->count2 = ntohl(*bp++); in afs_deliver_yfsvl_get_endpoints()
537 call->offset = 0; in afs_deliver_yfsvl_get_endpoints()
538 call->unmarshall = 4; in afs_deliver_yfsvl_get_endpoints()
542 switch (call->count2) { in afs_deliver_yfsvl_get_endpoints()
550 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
553 if (call->count > 1) in afs_deliver_yfsvl_get_endpoints()
555 ret = afs_extract_data(call, call->buffer, size, true); in afs_deliver_yfsvl_get_endpoints()
559 bp = call->buffer; in afs_deliver_yfsvl_get_endpoints()
560 switch (call->count2) { in afs_deliver_yfsvl_get_endpoints()
563 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
568 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
572 return afs_protocol_error(call, -EBADMSG); in afs_deliver_yfsvl_get_endpoints()
578 call->offset = 0; in afs_deliver_yfsvl_get_endpoints()
579 call->count--; in afs_deliver_yfsvl_get_endpoints()
580 if (call->count > 0) { in afs_deliver_yfsvl_get_endpoints()
581 call->count2 = ntohl(*bp++); in afs_deliver_yfsvl_get_endpoints()
586 call->unmarshall = 5; in afs_deliver_yfsvl_get_endpoints()
590 ret = afs_extract_data(call, call->buffer, 0, false); in afs_deliver_yfsvl_get_endpoints()
593 call->unmarshall = 6; in afs_deliver_yfsvl_get_endpoints()
599 alist = call->reply[0]; in afs_deliver_yfsvl_get_endpoints()
628 struct afs_call *call; in afs_yfsvl_get_endpoints() local
633 call = afs_alloc_flat_call(net, &afs_YFSVLGetEndpoints, in afs_yfsvl_get_endpoints()
636 if (!call) in afs_yfsvl_get_endpoints()
639 call->key = key; in afs_yfsvl_get_endpoints()
640 call->reply[0] = NULL; in afs_yfsvl_get_endpoints()
641 call->ret_reply0 = true; in afs_yfsvl_get_endpoints()
644 bp = call->request; in afs_yfsvl_get_endpoints()
649 trace_afs_make_vl_call(call); in afs_yfsvl_get_endpoints()
650 return (struct afs_addr_list *)afs_make_call(ac, call, GFP_KERNEL, false); in afs_yfsvl_get_endpoints()