• Home
  • Raw
  • Download

Lines Matching full:call

104  * route an incoming cache manager call
107 bool afs_cm_incoming_call(struct afs_call *call) in afs_cm_incoming_call() argument
109 _enter("{CB.OP %u}", call->operation_ID); in afs_cm_incoming_call()
111 switch (call->operation_ID) { in afs_cm_incoming_call()
113 call->type = &afs_SRXCBCallBack; in afs_cm_incoming_call()
116 call->type = &afs_SRXCBInitCallBackState; in afs_cm_incoming_call()
119 call->type = &afs_SRXCBInitCallBackState3; in afs_cm_incoming_call()
122 call->type = &afs_SRXCBProbe; in afs_cm_incoming_call()
125 call->type = &afs_SRXCBProbeUuid; in afs_cm_incoming_call()
128 call->type = &afs_SRXCBTellMeAboutYourself; in afs_cm_incoming_call()
136 * Clean up a cache manager call.
138 static void afs_cm_destructor(struct afs_call *call) in afs_cm_destructor() argument
140 kfree(call->buffer); in afs_cm_destructor()
141 call->buffer = NULL; in afs_cm_destructor()
149 struct afs_call *call = container_of(work, struct afs_call, work); in SRXAFSCB_CallBack() local
157 if (call->cm_server) in SRXAFSCB_CallBack()
158 afs_break_callbacks(call->cm_server, call->count, call->request); in SRXAFSCB_CallBack()
160 afs_send_empty_reply(call); in SRXAFSCB_CallBack()
161 afs_put_call(call); in SRXAFSCB_CallBack()
166 * deliver request data to a CB.CallBack call
168 static int afs_deliver_cb_callback(struct afs_call *call) in afs_deliver_cb_callback() argument
175 _enter("{%u}", call->unmarshall); in afs_deliver_cb_callback()
177 switch (call->unmarshall) { in afs_deliver_cb_callback()
179 call->offset = 0; in afs_deliver_cb_callback()
180 call->unmarshall++; in afs_deliver_cb_callback()
185 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_cb_callback()
189 call->count = ntohl(call->tmp); in afs_deliver_cb_callback()
190 _debug("FID count: %u", call->count); in afs_deliver_cb_callback()
191 if (call->count > AFSCBMAX) in afs_deliver_cb_callback()
192 return afs_protocol_error(call, -EBADMSG); in afs_deliver_cb_callback()
194 call->buffer = kmalloc(array3_size(call->count, 3, 4), in afs_deliver_cb_callback()
196 if (!call->buffer) in afs_deliver_cb_callback()
198 call->offset = 0; in afs_deliver_cb_callback()
199 call->unmarshall++; in afs_deliver_cb_callback()
203 ret = afs_extract_data(call, call->buffer, in afs_deliver_cb_callback()
204 call->count * 3 * 4, true); in afs_deliver_cb_callback()
209 call->request = kcalloc(call->count, in afs_deliver_cb_callback()
212 if (!call->request) in afs_deliver_cb_callback()
215 cb = call->request; in afs_deliver_cb_callback()
216 bp = call->buffer; in afs_deliver_cb_callback()
217 for (loop = call->count; loop > 0; loop--, cb++) { in afs_deliver_cb_callback()
224 call->offset = 0; in afs_deliver_cb_callback()
225 call->unmarshall++; in afs_deliver_cb_callback()
230 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_cb_callback()
234 call->count2 = ntohl(call->tmp); in afs_deliver_cb_callback()
235 _debug("CB count: %u", call->count2); in afs_deliver_cb_callback()
236 if (call->count2 != call->count && call->count2 != 0) in afs_deliver_cb_callback()
237 return afs_protocol_error(call, -EBADMSG); in afs_deliver_cb_callback()
238 call->offset = 0; in afs_deliver_cb_callback()
239 call->unmarshall++; in afs_deliver_cb_callback()
243 ret = afs_extract_data(call, call->buffer, in afs_deliver_cb_callback()
244 call->count2 * 3 * 4, false); in afs_deliver_cb_callback()
249 cb = call->request; in afs_deliver_cb_callback()
250 bp = call->buffer; in afs_deliver_cb_callback()
251 for (loop = call->count2; loop > 0; loop--, cb++) { in afs_deliver_cb_callback()
257 call->offset = 0; in afs_deliver_cb_callback()
258 call->unmarshall++; in afs_deliver_cb_callback()
263 if (!afs_check_call_state(call, AFS_CALL_SV_REPLYING)) in afs_deliver_cb_callback()
268 rxrpc_kernel_get_peer(call->net->socket, call->rxcall, &srx); in afs_deliver_cb_callback()
269 call->cm_server = afs_find_server(call->net, &srx); in afs_deliver_cb_callback()
270 if (!call->cm_server) in afs_deliver_cb_callback()
271 trace_afs_cm_no_server(call, &srx); in afs_deliver_cb_callback()
273 return afs_queue_call_work(call); in afs_deliver_cb_callback()
281 struct afs_call *call = container_of(work, struct afs_call, work); in SRXAFSCB_InitCallBackState() local
283 _enter("{%p}", call->cm_server); in SRXAFSCB_InitCallBackState()
285 if (call->cm_server) in SRXAFSCB_InitCallBackState()
286 afs_init_callback_state(call->cm_server); in SRXAFSCB_InitCallBackState()
287 afs_send_empty_reply(call); in SRXAFSCB_InitCallBackState()
288 afs_put_call(call); in SRXAFSCB_InitCallBackState()
293 * deliver request data to a CB.InitCallBackState call
295 static int afs_deliver_cb_init_call_back_state(struct afs_call *call) in afs_deliver_cb_init_call_back_state() argument
302 rxrpc_kernel_get_peer(call->net->socket, call->rxcall, &srx); in afs_deliver_cb_init_call_back_state()
304 ret = afs_extract_data(call, NULL, 0, false); in afs_deliver_cb_init_call_back_state()
310 call->cm_server = afs_find_server(call->net, &srx); in afs_deliver_cb_init_call_back_state()
311 if (!call->cm_server) in afs_deliver_cb_init_call_back_state()
312 trace_afs_cm_no_server(call, &srx); in afs_deliver_cb_init_call_back_state()
314 return afs_queue_call_work(call); in afs_deliver_cb_init_call_back_state()
318 * deliver request data to a CB.InitCallBackState3 call
320 static int afs_deliver_cb_init_call_back_state3(struct afs_call *call) in afs_deliver_cb_init_call_back_state3() argument
329 _enter("{%u}", call->unmarshall); in afs_deliver_cb_init_call_back_state3()
331 switch (call->unmarshall) { in afs_deliver_cb_init_call_back_state3()
333 call->offset = 0; in afs_deliver_cb_init_call_back_state3()
334 call->buffer = kmalloc_array(11, sizeof(__be32), GFP_KERNEL); in afs_deliver_cb_init_call_back_state3()
335 if (!call->buffer) in afs_deliver_cb_init_call_back_state3()
337 call->unmarshall++; in afs_deliver_cb_init_call_back_state3()
341 ret = afs_extract_data(call, call->buffer, in afs_deliver_cb_init_call_back_state3()
350 call->request = kmalloc(sizeof(struct afs_uuid), GFP_KERNEL); in afs_deliver_cb_init_call_back_state3()
351 if (!call->request) in afs_deliver_cb_init_call_back_state3()
354 b = call->buffer; in afs_deliver_cb_init_call_back_state3()
355 r = call->request; in afs_deliver_cb_init_call_back_state3()
365 call->offset = 0; in afs_deliver_cb_init_call_back_state3()
366 call->unmarshall++; in afs_deliver_cb_init_call_back_state3()
372 if (!afs_check_call_state(call, AFS_CALL_SV_REPLYING)) in afs_deliver_cb_init_call_back_state3()
378 call->cm_server = afs_find_server_by_uuid(call->net, call->request); in afs_deliver_cb_init_call_back_state3()
380 if (!call->cm_server) in afs_deliver_cb_init_call_back_state3()
381 trace_afs_cm_no_server_u(call, call->request); in afs_deliver_cb_init_call_back_state3()
383 return afs_queue_call_work(call); in afs_deliver_cb_init_call_back_state3()
391 struct afs_call *call = container_of(work, struct afs_call, work); in SRXAFSCB_Probe() local
394 afs_send_empty_reply(call); in SRXAFSCB_Probe()
395 afs_put_call(call); in SRXAFSCB_Probe()
400 * deliver request data to a CB.Probe call
402 static int afs_deliver_cb_probe(struct afs_call *call) in afs_deliver_cb_probe() argument
408 ret = afs_extract_data(call, NULL, 0, false); in afs_deliver_cb_probe()
412 if (!afs_check_call_state(call, AFS_CALL_SV_REPLYING)) in afs_deliver_cb_probe()
415 return afs_queue_call_work(call); in afs_deliver_cb_probe()
423 struct afs_call *call = container_of(work, struct afs_call, work); in SRXAFSCB_ProbeUuid() local
424 struct afs_uuid *r = call->request; in SRXAFSCB_ProbeUuid()
428 if (memcmp(r, &call->net->uuid, sizeof(call->net->uuid)) == 0) in SRXAFSCB_ProbeUuid()
429 afs_send_empty_reply(call); in SRXAFSCB_ProbeUuid()
431 rxrpc_kernel_abort_call(call->net->socket, call->rxcall, in SRXAFSCB_ProbeUuid()
434 afs_put_call(call); in SRXAFSCB_ProbeUuid()
439 * deliver request data to a CB.ProbeUuid call
441 static int afs_deliver_cb_probe_uuid(struct afs_call *call) in afs_deliver_cb_probe_uuid() argument
448 _enter("{%u}", call->unmarshall); in afs_deliver_cb_probe_uuid()
450 switch (call->unmarshall) { in afs_deliver_cb_probe_uuid()
452 call->offset = 0; in afs_deliver_cb_probe_uuid()
453 call->buffer = kmalloc_array(11, sizeof(__be32), GFP_KERNEL); in afs_deliver_cb_probe_uuid()
454 if (!call->buffer) in afs_deliver_cb_probe_uuid()
456 call->unmarshall++; in afs_deliver_cb_probe_uuid()
460 ret = afs_extract_data(call, call->buffer, in afs_deliver_cb_probe_uuid()
469 call->request = kmalloc(sizeof(struct afs_uuid), GFP_KERNEL); in afs_deliver_cb_probe_uuid()
470 if (!call->request) in afs_deliver_cb_probe_uuid()
473 b = call->buffer; in afs_deliver_cb_probe_uuid()
474 r = call->request; in afs_deliver_cb_probe_uuid()
484 call->offset = 0; in afs_deliver_cb_probe_uuid()
485 call->unmarshall++; in afs_deliver_cb_probe_uuid()
491 if (!afs_check_call_state(call, AFS_CALL_SV_REPLYING)) in afs_deliver_cb_probe_uuid()
494 return afs_queue_call_work(call); in afs_deliver_cb_probe_uuid()
503 struct afs_call *call = container_of(work, struct afs_call, work); in SRXAFSCB_TellMeAboutYourself() local
525 nifs = afs_get_ipv4_interfaces(call->net, ifs, 32, false); in SRXAFSCB_TellMeAboutYourself()
536 reply.ia.uuid[0] = call->net->uuid.time_low; in SRXAFSCB_TellMeAboutYourself()
537 reply.ia.uuid[1] = htonl(ntohs(call->net->uuid.time_mid)); in SRXAFSCB_TellMeAboutYourself()
538 reply.ia.uuid[2] = htonl(ntohs(call->net->uuid.time_hi_and_version)); in SRXAFSCB_TellMeAboutYourself()
539 reply.ia.uuid[3] = htonl((s8) call->net->uuid.clock_seq_hi_and_reserved); in SRXAFSCB_TellMeAboutYourself()
540 reply.ia.uuid[4] = htonl((s8) call->net->uuid.clock_seq_low); in SRXAFSCB_TellMeAboutYourself()
542 reply.ia.uuid[loop + 5] = htonl((s8) call->net->uuid.node[loop]); in SRXAFSCB_TellMeAboutYourself()
555 afs_send_simple_reply(call, &reply, sizeof(reply)); in SRXAFSCB_TellMeAboutYourself()
556 afs_put_call(call); in SRXAFSCB_TellMeAboutYourself()
561 * deliver request data to a CB.TellMeAboutYourself call
563 static int afs_deliver_cb_tell_me_about_yourself(struct afs_call *call) in afs_deliver_cb_tell_me_about_yourself() argument
569 ret = afs_extract_data(call, NULL, 0, false); in afs_deliver_cb_tell_me_about_yourself()
573 if (!afs_check_call_state(call, AFS_CALL_SV_REPLYING)) in afs_deliver_cb_tell_me_about_yourself()
576 return afs_queue_call_work(call); in afs_deliver_cb_tell_me_about_yourself()