diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 35 |
1 files changed, 1 insertions, 34 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 450ed0ce9071..4b7cbfd57714 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -458,8 +458,6 @@ void tipc_link_reset(struct tipc_link *l_ptr) | |||
458 | skb_queue_splice_init(&l_ptr->waiting_sks, &owner->waiting_sks); | 458 | skb_queue_splice_init(&l_ptr->waiting_sks, &owner->waiting_sks); |
459 | owner->action_flags |= TIPC_WAKEUP_USERS; | 459 | owner->action_flags |= TIPC_WAKEUP_USERS; |
460 | } | 460 | } |
461 | l_ptr->retransm_queue_head = 0; | ||
462 | l_ptr->retransm_queue_size = 0; | ||
463 | l_ptr->last_out = NULL; | 461 | l_ptr->last_out = NULL; |
464 | l_ptr->first_out = NULL; | 462 | l_ptr->first_out = NULL; |
465 | l_ptr->next_out = NULL; | 463 | l_ptr->next_out = NULL; |
@@ -870,38 +868,9 @@ static void tipc_link_sync_rcv(struct tipc_node *n, struct sk_buff *buf) | |||
870 | */ | 868 | */ |
871 | static u32 tipc_link_push_packet(struct tipc_link *l_ptr) | 869 | static u32 tipc_link_push_packet(struct tipc_link *l_ptr) |
872 | { | 870 | { |
873 | struct sk_buff *buf = l_ptr->first_out; | 871 | struct sk_buff *buf = l_ptr->next_out; |
874 | u32 r_q_size = l_ptr->retransm_queue_size; | ||
875 | u32 r_q_head = l_ptr->retransm_queue_head; | ||
876 | |||
877 | /* Step to position where retransmission failed, if any, */ | ||
878 | /* consider that buffers may have been released in meantime */ | ||
879 | if (r_q_size && buf) { | ||
880 | u32 last = lesser(mod(r_q_head + r_q_size), | ||
881 | link_last_sent(l_ptr)); | ||
882 | u32 first = buf_seqno(buf); | ||
883 | |||
884 | while (buf && less(first, r_q_head)) { | ||
885 | first = mod(first + 1); | ||
886 | buf = buf->next; | ||
887 | } | ||
888 | l_ptr->retransm_queue_head = r_q_head = first; | ||
889 | l_ptr->retransm_queue_size = r_q_size = mod(last - first); | ||
890 | } | ||
891 | |||
892 | /* Continue retransmission now, if there is anything: */ | ||
893 | if (r_q_size && buf) { | ||
894 | msg_set_ack(buf_msg(buf), mod(l_ptr->next_in_no - 1)); | ||
895 | msg_set_bcast_ack(buf_msg(buf), l_ptr->owner->bclink.last_in); | ||
896 | tipc_bearer_send(l_ptr->bearer_id, buf, &l_ptr->media_addr); | ||
897 | l_ptr->retransm_queue_head = mod(++r_q_head); | ||
898 | l_ptr->retransm_queue_size = --r_q_size; | ||
899 | l_ptr->stats.retransmitted++; | ||
900 | return 0; | ||
901 | } | ||
902 | 872 | ||
903 | /* Send one deferred data message, if send window not full: */ | 873 | /* Send one deferred data message, if send window not full: */ |
904 | buf = l_ptr->next_out; | ||
905 | if (buf) { | 874 | if (buf) { |
906 | struct tipc_msg *msg = buf_msg(buf); | 875 | struct tipc_msg *msg = buf_msg(buf); |
907 | u32 next = msg_seqno(msg); | 876 | u32 next = msg_seqno(msg); |
@@ -1025,8 +994,6 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *buf, | |||
1025 | retransmits--; | 994 | retransmits--; |
1026 | l_ptr->stats.retransmitted++; | 995 | l_ptr->stats.retransmitted++; |
1027 | } | 996 | } |
1028 | |||
1029 | l_ptr->retransm_queue_head = l_ptr->retransm_queue_size = 0; | ||
1030 | } | 997 | } |
1031 | 998 | ||
1032 | /** | 999 | /** |