Lines Matching refs:call
27 struct rxrpc_call *call,
107 static void rxrpc_send_abort(struct rxrpc_call *call, u32 abort_code) in rxrpc_send_abort() argument
109 write_lock_bh(&call->state_lock); in rxrpc_send_abort()
111 if (call->state <= RXRPC_CALL_COMPLETE) { in rxrpc_send_abort()
112 call->state = RXRPC_CALL_LOCALLY_ABORTED; in rxrpc_send_abort()
113 call->abort_code = abort_code; in rxrpc_send_abort()
114 set_bit(RXRPC_CALL_ABORT, &call->events); in rxrpc_send_abort()
115 del_timer_sync(&call->resend_timer); in rxrpc_send_abort()
116 del_timer_sync(&call->ack_timer); in rxrpc_send_abort()
117 clear_bit(RXRPC_CALL_RESEND_TIMER, &call->events); in rxrpc_send_abort()
118 clear_bit(RXRPC_CALL_ACK, &call->events); in rxrpc_send_abort()
119 clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); in rxrpc_send_abort()
120 rxrpc_queue_call(call); in rxrpc_send_abort()
123 write_unlock_bh(&call->state_lock); in rxrpc_send_abort()
136 struct rxrpc_call *call; in rxrpc_client_sendmsg() local
169 call = rxrpc_get_client_call(rx, trans, bundle, user_call_ID, in rxrpc_client_sendmsg()
173 if (IS_ERR(call)) { in rxrpc_client_sendmsg()
174 _leave(" = %ld", PTR_ERR(call)); in rxrpc_client_sendmsg()
175 return PTR_ERR(call); in rxrpc_client_sendmsg()
179 call->debug_id, call->user_call_ID, call->state, call->conn); in rxrpc_client_sendmsg()
181 if (call->state >= RXRPC_CALL_COMPLETE) { in rxrpc_client_sendmsg()
185 rxrpc_send_abort(call, abort_code); in rxrpc_client_sendmsg()
188 } else if (call->state != RXRPC_CALL_CLIENT_SEND_REQUEST) { in rxrpc_client_sendmsg()
192 ret = rxrpc_send_data(rx, call, msg, len); in rxrpc_client_sendmsg()
195 rxrpc_put_call(call); in rxrpc_client_sendmsg()
211 int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg, in rxrpc_kernel_send_data() argument
216 _enter("{%d,%s},", call->debug_id, rxrpc_call_states[call->state]); in rxrpc_kernel_send_data()
221 lock_sock(&call->socket->sk); in rxrpc_kernel_send_data()
224 call->debug_id, call->user_call_ID, call->state, call->conn); in rxrpc_kernel_send_data()
226 if (call->state >= RXRPC_CALL_COMPLETE) { in rxrpc_kernel_send_data()
228 } else if (call->state != RXRPC_CALL_CLIENT_SEND_REQUEST && in rxrpc_kernel_send_data()
229 call->state != RXRPC_CALL_SERVER_ACK_REQUEST && in rxrpc_kernel_send_data()
230 call->state != RXRPC_CALL_SERVER_SEND_REPLY) { in rxrpc_kernel_send_data()
233 ret = rxrpc_send_data(call->socket, call, msg, len); in rxrpc_kernel_send_data()
236 release_sock(&call->socket->sk); in rxrpc_kernel_send_data()
250 void rxrpc_kernel_abort_call(struct rxrpc_call *call, u32 abort_code) in rxrpc_kernel_abort_call() argument
252 _enter("{%d},%d", call->debug_id, abort_code); in rxrpc_kernel_abort_call()
254 lock_sock(&call->socket->sk); in rxrpc_kernel_abort_call()
257 call->debug_id, call->user_call_ID, call->state, call->conn); in rxrpc_kernel_abort_call()
259 if (call->state < RXRPC_CALL_COMPLETE) in rxrpc_kernel_abort_call()
260 rxrpc_send_abort(call, abort_code); in rxrpc_kernel_abort_call()
262 release_sock(&call->socket->sk); in rxrpc_kernel_abort_call()
275 struct rxrpc_call *call; in rxrpc_server_sendmsg() local
288 call = rxrpc_accept_call(rx, user_call_ID); in rxrpc_server_sendmsg()
289 if (IS_ERR(call)) in rxrpc_server_sendmsg()
290 return PTR_ERR(call); in rxrpc_server_sendmsg()
291 rxrpc_put_call(call); in rxrpc_server_sendmsg()
295 call = rxrpc_find_server_call(rx, user_call_ID); in rxrpc_server_sendmsg()
296 if (!call) in rxrpc_server_sendmsg()
298 if (call->state >= RXRPC_CALL_COMPLETE) { in rxrpc_server_sendmsg()
305 if (call->state != RXRPC_CALL_CLIENT_SEND_REQUEST && in rxrpc_server_sendmsg()
306 call->state != RXRPC_CALL_SERVER_ACK_REQUEST && in rxrpc_server_sendmsg()
307 call->state != RXRPC_CALL_SERVER_SEND_REPLY) { in rxrpc_server_sendmsg()
313 ret = rxrpc_send_data(rx, call, msg, len); in rxrpc_server_sendmsg()
317 rxrpc_send_abort(call, abort_code); in rxrpc_server_sendmsg()
324 rxrpc_put_call(call); in rxrpc_server_sendmsg()
397 struct rxrpc_call *call, in rxrpc_wait_for_tx_window() argument
404 CIRC_SPACE(call->acks_head, call->acks_tail, call->acks_winsz), in rxrpc_wait_for_tx_window()
407 add_wait_queue(&call->tx_waitq, &myself); in rxrpc_wait_for_tx_window()
412 if (CIRC_SPACE(call->acks_head, call->acks_tail, in rxrpc_wait_for_tx_window()
413 call->acks_winsz) > 0) in rxrpc_wait_for_tx_window()
425 remove_wait_queue(&call->tx_waitq, &myself); in rxrpc_wait_for_tx_window()
434 static inline void rxrpc_instant_resend(struct rxrpc_call *call) in rxrpc_instant_resend() argument
436 read_lock_bh(&call->state_lock); in rxrpc_instant_resend()
437 if (try_to_del_timer_sync(&call->resend_timer) >= 0) { in rxrpc_instant_resend()
438 clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); in rxrpc_instant_resend()
439 if (call->state < RXRPC_CALL_COMPLETE && in rxrpc_instant_resend()
440 !test_and_set_bit(RXRPC_CALL_RESEND_TIMER, &call->events)) in rxrpc_instant_resend()
441 rxrpc_queue_call(call); in rxrpc_instant_resend()
443 read_unlock_bh(&call->state_lock); in rxrpc_instant_resend()
450 static void rxrpc_queue_packet(struct rxrpc_call *call, struct sk_buff *skb, in rxrpc_queue_packet() argument
456 _net("queue skb %p [%d]", skb, call->acks_head); in rxrpc_queue_packet()
458 ASSERT(call->acks_window != NULL); in rxrpc_queue_packet()
459 call->acks_window[call->acks_head] = (unsigned long) skb; in rxrpc_queue_packet()
461 call->acks_head = (call->acks_head + 1) & (call->acks_winsz - 1); in rxrpc_queue_packet()
463 if (last || call->state == RXRPC_CALL_SERVER_ACK_REQUEST) { in rxrpc_queue_packet()
465 write_lock_bh(&call->state_lock); in rxrpc_queue_packet()
466 switch (call->state) { in rxrpc_queue_packet()
468 call->state = RXRPC_CALL_CLIENT_AWAIT_REPLY; in rxrpc_queue_packet()
471 call->state = RXRPC_CALL_SERVER_SEND_REPLY; in rxrpc_queue_packet()
475 call->state = RXRPC_CALL_SERVER_AWAIT_ACK; in rxrpc_queue_packet()
480 write_unlock_bh(&call->state_lock); in rxrpc_queue_packet()
488 if (!test_and_set_bit(RXRPC_CALL_RUN_RTIMER, &call->flags)) { in rxrpc_queue_packet()
490 call->resend_timer.expires = sp->resend_at; in rxrpc_queue_packet()
491 add_timer(&call->resend_timer); in rxrpc_queue_packet()
497 if (try_to_del_timer_sync(&call->ack_timer) >= 0) { in rxrpc_queue_packet()
500 ret = rxrpc_send_packet(call->conn->trans, skb); in rxrpc_queue_packet()
509 rxrpc_instant_resend(call); in rxrpc_queue_packet()
521 struct rxrpc_call *call, in rxrpc_send_data() argument
541 skb = call->tx_pending; in rxrpc_send_data()
542 call->tx_pending = NULL; in rxrpc_send_data()
551 if (CIRC_SPACE(call->acks_head, call->acks_tail, in rxrpc_send_data()
552 call->acks_winsz) <= 0) { in rxrpc_send_data()
556 ret = rxrpc_wait_for_tx_window(rx, call, in rxrpc_send_data()
562 max = call->conn->trans->peer->maxdata; in rxrpc_send_data()
563 max -= call->conn->security_size; in rxrpc_send_data()
564 max &= ~(call->conn->size_align - 1UL); in rxrpc_send_data()
570 space = chunk + call->conn->size_align; in rxrpc_send_data()
571 space &= ~(call->conn->size_align - 1UL); in rxrpc_send_data()
573 size = space + call->conn->header_size; in rxrpc_send_data()
589 _debug("HS: %u", call->conn->header_size); in rxrpc_send_data()
590 skb_reserve(skb, call->conn->header_size); in rxrpc_send_data()
591 skb->len += call->conn->header_size; in rxrpc_send_data()
631 if (call->state > RXRPC_CALL_COMPLETE) in rxrpc_send_data()
637 struct rxrpc_connection *conn = call->conn; in rxrpc_send_data()
651 seq = atomic_inc_return(&call->sequence); in rxrpc_send_data()
654 sp->hdr.cid = call->cid; in rxrpc_send_data()
655 sp->hdr.callNumber = call->call_id; in rxrpc_send_data()
668 else if (CIRC_SPACE(call->acks_head, call->acks_tail, in rxrpc_send_data()
669 call->acks_winsz) > 1) in rxrpc_send_data()
675 call, skb, skb->mark, in rxrpc_send_data()
682 rxrpc_queue_packet(call, skb, !msg_data_left(msg) && !more); in rxrpc_send_data()
690 call->tx_pending = skb; in rxrpc_send_data()
696 if (call->state == RXRPC_CALL_NETWORK_ERROR) in rxrpc_send_data()
697 ret = call->conn->trans->peer->net_error; in rxrpc_send_data()