Lines Matching refs:call

93 void __rxrpc_propose_ACK(struct rxrpc_call *call, u8 ack_reason,  in __rxrpc_propose_ACK()  argument
102 call->debug_id, rxrpc_acks(ack_reason), ntohl(serial), in __rxrpc_propose_ACK()
105 if (prior < rxrpc_ack_priority[call->ackr_reason]) { in __rxrpc_propose_ACK()
113 if (prior == rxrpc_ack_priority[call->ackr_reason]) { in __rxrpc_propose_ACK()
115 call->ackr_serial = serial; in __rxrpc_propose_ACK()
121 call->ackr_reason = ack_reason; in __rxrpc_propose_ACK()
122 call->ackr_serial = serial; in __rxrpc_propose_ACK()
154 if (!timer_pending(&call->ack_timer) || in __rxrpc_propose_ACK()
155 time_after(call->ack_timer.expires, expiry)) in __rxrpc_propose_ACK()
156 mod_timer(&call->ack_timer, expiry); in __rxrpc_propose_ACK()
161 try_to_del_timer_sync(&call->ack_timer); in __rxrpc_propose_ACK()
162 read_lock_bh(&call->state_lock); in __rxrpc_propose_ACK()
163 if (call->state <= RXRPC_CALL_COMPLETE && in __rxrpc_propose_ACK()
164 !test_and_set_bit(RXRPC_CALL_ACK, &call->events)) in __rxrpc_propose_ACK()
165 rxrpc_queue_call(call); in __rxrpc_propose_ACK()
166 read_unlock_bh(&call->state_lock); in __rxrpc_propose_ACK()
172 void rxrpc_propose_ACK(struct rxrpc_call *call, u8 ack_reason, in rxrpc_propose_ACK() argument
177 if (prior > rxrpc_ack_priority[call->ackr_reason]) { in rxrpc_propose_ACK()
178 spin_lock_bh(&call->lock); in rxrpc_propose_ACK()
179 __rxrpc_propose_ACK(call, ack_reason, serial, immediate); in rxrpc_propose_ACK()
180 spin_unlock_bh(&call->lock); in rxrpc_propose_ACK()
187 static void rxrpc_set_resend(struct rxrpc_call *call, u8 resend, in rxrpc_set_resend() argument
190 read_lock_bh(&call->state_lock); in rxrpc_set_resend()
191 if (call->state >= RXRPC_CALL_COMPLETE) in rxrpc_set_resend()
196 set_bit(RXRPC_CALL_RESEND, &call->events); in rxrpc_set_resend()
201 set_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); in rxrpc_set_resend()
202 mod_timer(&call->resend_timer, resend_at); in rxrpc_set_resend()
205 del_timer_sync(&call->resend_timer); in rxrpc_set_resend()
206 clear_bit(RXRPC_CALL_RESEND_TIMER, &call->events); in rxrpc_set_resend()
207 clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); in rxrpc_set_resend()
209 read_unlock_bh(&call->state_lock); in rxrpc_set_resend()
215 static void rxrpc_resend(struct rxrpc_call *call) in rxrpc_resend() argument
226 call->acks_hard, call->acks_unacked, in rxrpc_resend()
227 atomic_read(&call->sequence), in rxrpc_resend()
228 CIRC_CNT(call->acks_head, call->acks_tail, call->acks_winsz)); in rxrpc_resend()
234 for (loop = call->acks_tail; in rxrpc_resend()
235 loop != call->acks_head || stop; in rxrpc_resend()
236 loop = (loop + 1) & (call->acks_winsz - 1) in rxrpc_resend()
238 p_txb = call->acks_window + loop; in rxrpc_resend()
251 htonl(atomic_inc_return(&call->conn->serial)); in rxrpc_resend()
258 if (rxrpc_send_packet(call->conn->trans, txb) < 0) { in rxrpc_resend()
279 rxrpc_set_resend(call, resend, resend_at); in rxrpc_resend()
286 static void rxrpc_resend_timer(struct rxrpc_call *call) in rxrpc_resend_timer() argument
295 call->acks_tail, call->acks_unacked, call->acks_head); in rxrpc_resend_timer()
297 if (call->state >= RXRPC_CALL_COMPLETE) in rxrpc_resend_timer()
303 for (loop = call->acks_unacked; in rxrpc_resend_timer()
304 loop != call->acks_head; in rxrpc_resend_timer()
305 loop = (loop + 1) & (call->acks_winsz - 1) in rxrpc_resend_timer()
307 p_txb = call->acks_window + loop; in rxrpc_resend_timer()
328 rxrpc_set_resend(call, resend, resend_at); in rxrpc_resend_timer()
337 static int rxrpc_process_soft_ACKs(struct rxrpc_call *call, in rxrpc_process_soft_ACKs() argument
348 call->acks_hard, in rxrpc_process_soft_ACKs()
349 CIRC_CNT(call->acks_head, call->acks_tail, call->acks_winsz), in rxrpc_process_soft_ACKs()
358 p_txb = call->acks_window; in rxrpc_process_soft_ACKs()
359 p_txb += (call->acks_tail + loop) & (call->acks_winsz - 1); in rxrpc_process_soft_ACKs()
381 call->acks_unacked = (call->acks_tail + loop) & (call->acks_winsz - 1); in rxrpc_process_soft_ACKs()
385 for (loop = call->acks_unacked; in rxrpc_process_soft_ACKs()
386 loop != call->acks_head; in rxrpc_process_soft_ACKs()
387 loop = (loop + 1) & (call->acks_winsz - 1) in rxrpc_process_soft_ACKs()
389 p_txb = call->acks_window + loop; in rxrpc_process_soft_ACKs()
413 rxrpc_set_resend(call, resend, resend_at); in rxrpc_process_soft_ACKs()
425 static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard) in rxrpc_rotate_tx_window() argument
428 int tail = call->acks_tail, old_tail; in rxrpc_rotate_tx_window()
429 int win = CIRC_CNT(call->acks_head, tail, call->acks_winsz); in rxrpc_rotate_tx_window()
431 _enter("{%u,%u},%u", call->acks_hard, win, hard); in rxrpc_rotate_tx_window()
433 ASSERTCMP(hard - call->acks_hard, <=, win); in rxrpc_rotate_tx_window()
435 while (call->acks_hard < hard) { in rxrpc_rotate_tx_window()
437 _skb = call->acks_window[tail] & ~1; in rxrpc_rotate_tx_window()
440 tail = (tail + 1) & (call->acks_winsz - 1); in rxrpc_rotate_tx_window()
441 call->acks_tail = tail; in rxrpc_rotate_tx_window()
442 if (call->acks_unacked == old_tail) in rxrpc_rotate_tx_window()
443 call->acks_unacked = tail; in rxrpc_rotate_tx_window()
444 call->acks_hard++; in rxrpc_rotate_tx_window()
447 wake_up(&call->tx_waitq); in rxrpc_rotate_tx_window()
453 static void rxrpc_clear_tx_window(struct rxrpc_call *call) in rxrpc_clear_tx_window() argument
455 rxrpc_rotate_tx_window(call, atomic_read(&call->sequence)); in rxrpc_clear_tx_window()
461 static int rxrpc_drain_rx_oos_queue(struct rxrpc_call *call) in rxrpc_drain_rx_oos_queue() argument
468 _enter("{%d,%d}", call->rx_data_post, call->rx_first_oos); in rxrpc_drain_rx_oos_queue()
470 spin_lock_bh(&call->lock); in rxrpc_drain_rx_oos_queue()
473 if (test_bit(RXRPC_CALL_RELEASED, &call->flags)) in rxrpc_drain_rx_oos_queue()
476 skb = skb_dequeue(&call->rx_oos_queue); in rxrpc_drain_rx_oos_queue()
481 ntohl(sp->hdr.seq), call->rx_first_oos); in rxrpc_drain_rx_oos_queue()
483 if (ntohl(sp->hdr.seq) != call->rx_first_oos) { in rxrpc_drain_rx_oos_queue()
484 skb_queue_head(&call->rx_oos_queue, skb); in rxrpc_drain_rx_oos_queue()
485 call->rx_first_oos = ntohl(rxrpc_skb(skb)->hdr.seq); in rxrpc_drain_rx_oos_queue()
486 _debug("requeue %p {%u}", skb, call->rx_first_oos); in rxrpc_drain_rx_oos_queue()
491 ret = rxrpc_queue_rcv_skb(call, skb, true, terminal); in rxrpc_drain_rx_oos_queue()
493 _debug("drain #%u", call->rx_data_post); in rxrpc_drain_rx_oos_queue()
494 call->rx_data_post++; in rxrpc_drain_rx_oos_queue()
497 skb = skb_peek(&call->rx_oos_queue); in rxrpc_drain_rx_oos_queue()
499 call->rx_first_oos = in rxrpc_drain_rx_oos_queue()
502 call->rx_first_oos = 0; in rxrpc_drain_rx_oos_queue()
503 _debug("peek %p {%u}", skb, call->rx_first_oos); in rxrpc_drain_rx_oos_queue()
509 spin_unlock_bh(&call->lock); in rxrpc_drain_rx_oos_queue()
517 static void rxrpc_insert_oos_packet(struct rxrpc_call *call, in rxrpc_insert_oos_packet() argument
529 ASSERTCMP(sp->call, ==, NULL); in rxrpc_insert_oos_packet()
530 sp->call = call; in rxrpc_insert_oos_packet()
531 rxrpc_get_call(call); in rxrpc_insert_oos_packet()
534 spin_lock_bh(&call->lock); in rxrpc_insert_oos_packet()
536 skb_queue_walk(&call->rx_oos_queue, p) { in rxrpc_insert_oos_packet()
541 skb_insert(p, skb, &call->rx_oos_queue); in rxrpc_insert_oos_packet()
547 skb_queue_tail(&call->rx_oos_queue, skb); in rxrpc_insert_oos_packet()
551 if (call->rx_first_oos == 0 || seq < call->rx_first_oos) in rxrpc_insert_oos_packet()
552 call->rx_first_oos = seq; in rxrpc_insert_oos_packet()
554 read_lock(&call->state_lock); in rxrpc_insert_oos_packet()
555 if (call->state < RXRPC_CALL_COMPLETE && in rxrpc_insert_oos_packet()
556 call->rx_data_post == call->rx_first_oos) { in rxrpc_insert_oos_packet()
558 set_bit(RXRPC_CALL_DRAIN_RX_OOS, &call->events); in rxrpc_insert_oos_packet()
560 read_unlock(&call->state_lock); in rxrpc_insert_oos_packet()
562 spin_unlock_bh(&call->lock); in rxrpc_insert_oos_packet()
563 _leave(" [stored #%u]", call->rx_first_oos); in rxrpc_insert_oos_packet()
569 static void rxrpc_zap_tx_window(struct rxrpc_call *call) in rxrpc_zap_tx_window() argument
574 u8 winsz = call->acks_winsz; in rxrpc_zap_tx_window()
577 acks_window = call->acks_window; in rxrpc_zap_tx_window()
578 call->acks_window = NULL; in rxrpc_zap_tx_window()
580 while (CIRC_CNT(call->acks_head, call->acks_tail, winsz) > 0) { in rxrpc_zap_tx_window()
581 tail = call->acks_tail; in rxrpc_zap_tx_window()
585 call->acks_tail = (call->acks_tail + 1) & (winsz - 1); in rxrpc_zap_tx_window()
599 static void rxrpc_extract_ackinfo(struct rxrpc_call *call, struct sk_buff *skb, in rxrpc_extract_ackinfo() argument
618 peer = call->conn->trans->peer; in rxrpc_extract_ackinfo()
631 static int rxrpc_process_rx_queue(struct rxrpc_call *call, in rxrpc_process_rx_queue() argument
644 skb = skb_dequeue(&call->rx_queue); in rxrpc_process_rx_queue()
652 _debug("process %s [st %d]", rxrpc_pkts[sp->hdr.type], call->state); in rxrpc_process_rx_queue()
664 if (rxrpc_verify_packet(call, skb, _abort_code) < 0) in rxrpc_process_rx_queue()
667 rxrpc_insert_oos_packet(call, skb); in rxrpc_process_rx_queue()
681 tx = atomic_read(&call->sequence); in rxrpc_process_rx_queue()
692 rxrpc_extract_ackinfo(call, skb, latest, ack.nAcks); in rxrpc_process_rx_queue()
696 rxrpc_propose_ACK(call, RXRPC_ACK_PING_RESPONSE, in rxrpc_process_rx_queue()
701 if (latest - call->acks_latest <= 0) { in rxrpc_process_rx_queue()
703 latest, call->acks_latest); in rxrpc_process_rx_queue()
706 call->acks_latest = latest; in rxrpc_process_rx_queue()
708 if (call->state != RXRPC_CALL_CLIENT_SEND_REQUEST && in rxrpc_process_rx_queue()
709 call->state != RXRPC_CALL_CLIENT_AWAIT_REPLY && in rxrpc_process_rx_queue()
710 call->state != RXRPC_CALL_SERVER_SEND_REPLY && in rxrpc_process_rx_queue()
711 call->state != RXRPC_CALL_SERVER_AWAIT_ACK) in rxrpc_process_rx_queue()
714 _debug("Tx=%d H=%u S=%d", tx, call->acks_hard, call->state); in rxrpc_process_rx_queue()
724 if ((call->state == RXRPC_CALL_CLIENT_AWAIT_REPLY || in rxrpc_process_rx_queue()
725 call->state == RXRPC_CALL_SERVER_AWAIT_ACK) && in rxrpc_process_rx_queue()
727 call->acks_hard = tx; in rxrpc_process_rx_queue()
732 rxrpc_rotate_tx_window(call, hard - 1); in rxrpc_process_rx_queue()
743 if (rxrpc_process_soft_ACKs(call, &ack, skb) < 0) in rxrpc_process_rx_queue()
767 write_lock_bh(&call->state_lock); in rxrpc_process_rx_queue()
768 _debug("ack all %d", call->state); in rxrpc_process_rx_queue()
770 switch (call->state) { in rxrpc_process_rx_queue()
772 call->state = RXRPC_CALL_CLIENT_RECV_REPLY; in rxrpc_process_rx_queue()
776 call->state = RXRPC_CALL_COMPLETE; in rxrpc_process_rx_queue()
783 write_unlock_bh(&call->state_lock); in rxrpc_process_rx_queue()
787 write_unlock_bh(&call->state_lock); in rxrpc_process_rx_queue()
792 CIRC_CNT(call->acks_head, call->acks_tail, call->acks_winsz)); in rxrpc_process_rx_queue()
794 del_timer_sync(&call->resend_timer); in rxrpc_process_rx_queue()
795 clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); in rxrpc_process_rx_queue()
796 clear_bit(RXRPC_CALL_RESEND_TIMER, &call->events); in rxrpc_process_rx_queue()
798 if (call->acks_window) in rxrpc_process_rx_queue()
799 rxrpc_zap_tx_window(call); in rxrpc_process_rx_queue()
805 sp->call = call; in rxrpc_process_rx_queue()
806 rxrpc_get_call(call); in rxrpc_process_rx_queue()
807 spin_lock_bh(&call->lock); in rxrpc_process_rx_queue()
808 if (rxrpc_queue_rcv_skb(call, skb, true, true) < 0) in rxrpc_process_rx_queue()
810 spin_unlock_bh(&call->lock); in rxrpc_process_rx_queue()
819 write_unlock_bh(&call->state_lock); in rxrpc_process_rx_queue()
829 static int rxrpc_post_message(struct rxrpc_call *call, u32 mark, u32 error, in rxrpc_post_message() argument
837 call->debug_id, call->flags, mark, error, fatal); in rxrpc_post_message()
841 del_timer_sync(&call->resend_timer); in rxrpc_post_message()
842 del_timer_sync(&call->ack_timer); in rxrpc_post_message()
843 clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); in rxrpc_post_message()
847 !test_bit(RXRPC_CALL_HAS_USERID, &call->flags)) { in rxrpc_post_message()
852 if (!test_bit(RXRPC_CALL_TERMINAL_MSG, &call->flags)) { in rxrpc_post_message()
864 sp->call = call; in rxrpc_post_message()
865 rxrpc_get_call(call); in rxrpc_post_message()
867 spin_lock_bh(&call->lock); in rxrpc_post_message()
868 ret = rxrpc_queue_rcv_skb(call, skb, true, fatal); in rxrpc_post_message()
869 spin_unlock_bh(&call->lock); in rxrpc_post_message()
882 struct rxrpc_call *call = in rxrpc_process_call() local
898 call->debug_id, rxrpc_call_states[call->state], call->events, in rxrpc_process_call()
899 (jiffies - call->creation_jif) / (HZ / 10)); in rxrpc_process_call()
901 if (test_and_set_bit(RXRPC_CALL_PROC_BUSY, &call->flags)) { in rxrpc_process_call()
908 msg.msg_name = &call->conn->trans->peer->srx.transport.sin; in rxrpc_process_call()
909 msg.msg_namelen = sizeof(call->conn->trans->peer->srx.transport.sin); in rxrpc_process_call()
914 hdr.epoch = call->conn->epoch; in rxrpc_process_call()
915 hdr.cid = call->cid; in rxrpc_process_call()
916 hdr.callNumber = call->call_id; in rxrpc_process_call()
919 hdr.flags = call->conn->out_clientflag; in rxrpc_process_call()
921 hdr.securityIndex = call->conn->security_ix; in rxrpc_process_call()
923 hdr.serviceId = call->conn->service_id; in rxrpc_process_call()
930 if (test_bit(RXRPC_CALL_RELEASE, &call->events)) { in rxrpc_process_call()
931 rxrpc_release_call(call); in rxrpc_process_call()
932 clear_bit(RXRPC_CALL_RELEASE, &call->events); in rxrpc_process_call()
935 if (test_bit(RXRPC_CALL_RCVD_ERROR, &call->events)) { in rxrpc_process_call()
938 clear_bit(RXRPC_CALL_CONN_ABORT, &call->events); in rxrpc_process_call()
939 clear_bit(RXRPC_CALL_REJECT_BUSY, &call->events); in rxrpc_process_call()
940 clear_bit(RXRPC_CALL_ABORT, &call->events); in rxrpc_process_call()
942 error = call->conn->trans->peer->net_error; in rxrpc_process_call()
945 if (rxrpc_post_message(call, RXRPC_SKB_MARK_NET_ERROR, in rxrpc_process_call()
948 clear_bit(RXRPC_CALL_RCVD_ERROR, &call->events); in rxrpc_process_call()
952 if (test_bit(RXRPC_CALL_CONN_ABORT, &call->events)) { in rxrpc_process_call()
953 ASSERTCMP(call->state, >, RXRPC_CALL_COMPLETE); in rxrpc_process_call()
955 clear_bit(RXRPC_CALL_REJECT_BUSY, &call->events); in rxrpc_process_call()
956 clear_bit(RXRPC_CALL_ABORT, &call->events); in rxrpc_process_call()
960 if (rxrpc_post_message(call, RXRPC_SKB_MARK_LOCAL_ERROR, in rxrpc_process_call()
961 call->conn->error, true) < 0) in rxrpc_process_call()
963 clear_bit(RXRPC_CALL_CONN_ABORT, &call->events); in rxrpc_process_call()
967 if (test_bit(RXRPC_CALL_REJECT_BUSY, &call->events)) { in rxrpc_process_call()
973 if (test_bit(RXRPC_CALL_ABORT, &call->events)) { in rxrpc_process_call()
974 ASSERTCMP(call->state, >, RXRPC_CALL_COMPLETE); in rxrpc_process_call()
976 if (rxrpc_post_message(call, RXRPC_SKB_MARK_LOCAL_ERROR, in rxrpc_process_call()
980 data = htonl(call->abort_code); in rxrpc_process_call()
987 if (test_bit(RXRPC_CALL_ACK_FINAL, &call->events)) { in rxrpc_process_call()
995 call->ackr_reason = 0; in rxrpc_process_call()
997 spin_lock_bh(&call->lock); in rxrpc_process_call()
998 ack.serial = call->ackr_serial; in rxrpc_process_call()
999 ack.previousPacket = call->ackr_prev_seq; in rxrpc_process_call()
1000 ack.firstPacket = htonl(call->rx_data_eaten + 1); in rxrpc_process_call()
1001 spin_unlock_bh(&call->lock); in rxrpc_process_call()
1014 if (call->events & ((1 << RXRPC_CALL_RCVD_BUSY) | in rxrpc_process_call()
1019 if (test_bit(RXRPC_CALL_RCVD_ABORT, &call->events)) in rxrpc_process_call()
1025 rxrpc_clear_tx_window(call); in rxrpc_process_call()
1026 if (rxrpc_post_message(call, mark, ECONNABORTED, true) < 0) in rxrpc_process_call()
1029 clear_bit(RXRPC_CALL_RCVD_BUSY, &call->events); in rxrpc_process_call()
1030 clear_bit(RXRPC_CALL_RCVD_ABORT, &call->events); in rxrpc_process_call()
1034 if (test_and_clear_bit(RXRPC_CALL_RCVD_ACKALL, &call->events)) { in rxrpc_process_call()
1036 rxrpc_clear_tx_window(call); in rxrpc_process_call()
1039 if (test_bit(RXRPC_CALL_LIFE_TIMER, &call->events)) { in rxrpc_process_call()
1040 write_lock_bh(&call->state_lock); in rxrpc_process_call()
1041 if (call->state <= RXRPC_CALL_COMPLETE) { in rxrpc_process_call()
1042 call->state = RXRPC_CALL_LOCALLY_ABORTED; in rxrpc_process_call()
1043 call->abort_code = RX_CALL_TIMEOUT; in rxrpc_process_call()
1044 set_bit(RXRPC_CALL_ABORT, &call->events); in rxrpc_process_call()
1046 write_unlock_bh(&call->state_lock); in rxrpc_process_call()
1049 if (rxrpc_post_message(call, RXRPC_SKB_MARK_LOCAL_ERROR, in rxrpc_process_call()
1053 clear_bit(RXRPC_CALL_LIFE_TIMER, &call->events); in rxrpc_process_call()
1058 if (!skb_queue_empty(&call->rx_queue)) { in rxrpc_process_call()
1059 switch (rxrpc_process_rx_queue(call, &abort_code)) { in rxrpc_process_call()
1068 rxrpc_abort_call(call, abort_code); in rxrpc_process_call()
1074 if (test_and_clear_bit(RXRPC_CALL_RESEND_TIMER, &call->events)) in rxrpc_process_call()
1075 rxrpc_resend_timer(call); in rxrpc_process_call()
1076 if (test_and_clear_bit(RXRPC_CALL_RESEND, &call->events)) in rxrpc_process_call()
1077 rxrpc_resend(call); in rxrpc_process_call()
1080 if (test_bit(RXRPC_CALL_ACK, &call->events)) { in rxrpc_process_call()
1082 call->rx_data_eaten, call->ackr_win_top, in rxrpc_process_call()
1083 call->ackr_window[0]); in rxrpc_process_call()
1085 if (call->state > RXRPC_CALL_SERVER_ACK_REQUEST && in rxrpc_process_call()
1086 call->ackr_reason != RXRPC_ACK_PING_RESPONSE) { in rxrpc_process_call()
1088 clear_bit(RXRPC_CALL_ACK, &call->events); in rxrpc_process_call()
1094 acks = kzalloc(call->ackr_win_top - call->rx_data_eaten, in rxrpc_process_call()
1105 spin_lock_bh(&call->lock); in rxrpc_process_call()
1106 ack.reason = call->ackr_reason; in rxrpc_process_call()
1107 ack.serial = call->ackr_serial; in rxrpc_process_call()
1108 ack.previousPacket = call->ackr_prev_seq; in rxrpc_process_call()
1109 ack.firstPacket = htonl(call->rx_data_eaten + 1); in rxrpc_process_call()
1114 for (bits = call->ackr_window[loop]; bits; bits >>= 1 in rxrpc_process_call()
1124 call->ackr_reason = 0; in rxrpc_process_call()
1125 spin_unlock_bh(&call->lock); in rxrpc_process_call()
1155 if (test_and_clear_bit(RXRPC_CALL_SECURED, &call->events)) { in rxrpc_process_call()
1157 spin_lock_bh(&call->lock); in rxrpc_process_call()
1159 if (call->state == RXRPC_CALL_SERVER_SECURING) { in rxrpc_process_call()
1161 write_lock(&call->conn->lock); in rxrpc_process_call()
1162 if (!test_bit(RXRPC_CALL_RELEASED, &call->flags) && in rxrpc_process_call()
1163 !test_bit(RXRPC_CALL_RELEASE, &call->events)) { in rxrpc_process_call()
1165 call->state = RXRPC_CALL_SERVER_ACCEPTING; in rxrpc_process_call()
1166 list_move_tail(&call->accept_link, in rxrpc_process_call()
1167 &call->socket->acceptq); in rxrpc_process_call()
1169 write_unlock(&call->conn->lock); in rxrpc_process_call()
1170 read_lock(&call->state_lock); in rxrpc_process_call()
1171 if (call->state < RXRPC_CALL_COMPLETE) in rxrpc_process_call()
1172 set_bit(RXRPC_CALL_POST_ACCEPT, &call->events); in rxrpc_process_call()
1173 read_unlock(&call->state_lock); in rxrpc_process_call()
1176 spin_unlock_bh(&call->lock); in rxrpc_process_call()
1177 if (!test_bit(RXRPC_CALL_POST_ACCEPT, &call->events)) in rxrpc_process_call()
1182 if (test_bit(RXRPC_CALL_POST_ACCEPT, &call->events)) { in rxrpc_process_call()
1184 if (rxrpc_post_message(call, RXRPC_SKB_MARK_NEW_CALL, in rxrpc_process_call()
1187 clear_bit(RXRPC_CALL_POST_ACCEPT, &call->events); in rxrpc_process_call()
1192 if (test_and_clear_bit(RXRPC_CALL_ACCEPTED, &call->events)) { in rxrpc_process_call()
1194 ASSERTCMP(call->rx_data_post, ==, 0); in rxrpc_process_call()
1195 call->rx_data_post = 1; in rxrpc_process_call()
1196 read_lock_bh(&call->state_lock); in rxrpc_process_call()
1197 if (call->state < RXRPC_CALL_COMPLETE) in rxrpc_process_call()
1198 set_bit(RXRPC_CALL_DRAIN_RX_OOS, &call->events); in rxrpc_process_call()
1199 read_unlock_bh(&call->state_lock); in rxrpc_process_call()
1204 if (test_and_clear_bit(RXRPC_CALL_DRAIN_RX_OOS, &call->events)) { in rxrpc_process_call()
1205 while (call->rx_data_post == call->rx_first_oos) in rxrpc_process_call()
1206 if (rxrpc_drain_rx_oos_queue(call) < 0) in rxrpc_process_call()
1215 ack.maxSkew = htons(atomic_read(&call->conn->hi_serial) - in rxrpc_process_call()
1218 mtu = call->conn->trans->peer->if_mtu; in rxrpc_process_call()
1219 mtu -= call->conn->trans->peer->hdrsize; in rxrpc_process_call()
1227 hdr.serial = htonl(atomic_inc_return(&call->conn->serial)); in rxrpc_process_call()
1237 del_timer_sync(&call->ack_timer); in rxrpc_process_call()
1239 set_bit(RXRPC_CALL_TX_SOFT_ACK, &call->flags); in rxrpc_process_call()
1245 hdr.serial = htonl(atomic_inc_return(&call->conn->serial)); in rxrpc_process_call()
1271 ret = kernel_sendmsg(call->conn->trans->local->socket, in rxrpc_process_call()
1275 read_lock_bh(&call->state_lock); in rxrpc_process_call()
1276 if (call->state < RXRPC_CALL_DEAD) in rxrpc_process_call()
1277 rxrpc_queue_call(call); in rxrpc_process_call()
1278 read_unlock_bh(&call->state_lock); in rxrpc_process_call()
1284 clear_bit(genbit, &call->events); in rxrpc_process_call()
1285 clear_bit(RXRPC_CALL_RCVD_ABORT, &call->events); in rxrpc_process_call()
1289 write_lock_bh(&call->state_lock); in rxrpc_process_call()
1290 if (call->state == RXRPC_CALL_CLIENT_FINAL_ACK) in rxrpc_process_call()
1291 call->state = RXRPC_CALL_COMPLETE; in rxrpc_process_call()
1292 write_unlock_bh(&call->state_lock); in rxrpc_process_call()
1296 clear_bit(genbit, &call->events); in rxrpc_process_call()
1297 switch (call->state) { in rxrpc_process_call()
1303 rxrpc_propose_ACK(call, RXRPC_ACK_DELAY, in rxrpc_process_call()
1304 call->ackr_serial, false); in rxrpc_process_call()
1312 del_timer_sync(&call->ack_timer); in rxrpc_process_call()
1313 if (test_and_clear_bit(RXRPC_CALL_ACK_FINAL, &call->events)) in rxrpc_process_call()
1314 rxrpc_put_call(call); in rxrpc_process_call()
1315 clear_bit(RXRPC_CALL_ACK, &call->events); in rxrpc_process_call()
1318 if (call->events || !skb_queue_empty(&call->rx_queue)) { in rxrpc_process_call()
1319 read_lock_bh(&call->state_lock); in rxrpc_process_call()
1320 if (call->state < RXRPC_CALL_DEAD) in rxrpc_process_call()
1321 rxrpc_queue_call(call); in rxrpc_process_call()
1322 read_unlock_bh(&call->state_lock); in rxrpc_process_call()
1326 if (call->state >= RXRPC_CALL_COMPLETE && in rxrpc_process_call()
1327 !list_empty(&call->accept_link)) { in rxrpc_process_call()
1329 call, call->events, call->flags, in rxrpc_process_call()
1330 ntohl(call->conn->cid)); in rxrpc_process_call()
1332 read_lock_bh(&call->state_lock); in rxrpc_process_call()
1333 if (!test_bit(RXRPC_CALL_RELEASED, &call->flags) && in rxrpc_process_call()
1334 !test_and_set_bit(RXRPC_CALL_RELEASE, &call->events)) in rxrpc_process_call()
1335 rxrpc_queue_call(call); in rxrpc_process_call()
1336 read_unlock_bh(&call->state_lock); in rxrpc_process_call()
1340 clear_bit(RXRPC_CALL_PROC_BUSY, &call->flags); in rxrpc_process_call()
1347 if (call->events && !work_pending(&call->processor)) { in rxrpc_process_call()
1348 _debug("jumpstart %x", ntohl(call->conn->cid)); in rxrpc_process_call()
1349 rxrpc_queue_call(call); in rxrpc_process_call()