-static void link_reset_all(unsigned long addr)
-{
- struct node *n_ptr;
- char addr_string[16];
- u32 i;
-
- read_lock_bh(&tipc_net_lock);
- n_ptr = tipc_node_find((u32)addr);
- if (!n_ptr) {
- read_unlock_bh(&tipc_net_lock);
- return; /* node no longer exists */
- }
-
- tipc_node_lock(n_ptr);
-
- warn("Resetting all links to %s\n",
- addr_string_fill(addr_string, n_ptr->addr));
-
- for (i = 0; i < MAX_BEARERS; i++) {
- if (n_ptr->links[i]) {
- link_print(n_ptr->links[i], TIPC_OUTPUT,
- "Resetting link\n");
- tipc_link_reset(n_ptr->links[i]);
- }
- }
-
- tipc_node_unlock(n_ptr);
- read_unlock_bh(&tipc_net_lock);
-}
-
-static void link_retransmit_failure(struct link *l_ptr, struct sk_buff *buf)
-{
- struct tipc_msg *msg = buf_msg(buf);
-
- warn("Retransmission failure on link <%s>\n", l_ptr->name);
- tipc_msg_print(TIPC_OUTPUT, msg, ">RETR-FAIL>");
-
- if (l_ptr->addr) {
-
- /* Handle failure on standard link */
-
- link_print(l_ptr, TIPC_OUTPUT, "Resetting link\n");
- tipc_link_reset(l_ptr);
-
- } else {
-
- /* Handle failure on broadcast link */
-
- struct node *n_ptr;
- char addr_string[16];
-
- tipc_printf(TIPC_OUTPUT, "Msg seq number: %u, ", msg_seqno(msg));
- tipc_printf(TIPC_OUTPUT, "Outstanding acks: %u\n", (u32)TIPC_SKB_CB(buf)->handle);
-
- n_ptr = l_ptr->owner->next;
- tipc_node_lock(n_ptr);
-
- addr_string_fill(addr_string, n_ptr->addr);
- tipc_printf(TIPC_OUTPUT, "Multicast link info for %s\n", addr_string);
- tipc_printf(TIPC_OUTPUT, "Supported: %d, ", n_ptr->bclink.supported);
- tipc_printf(TIPC_OUTPUT, "Acked: %u\n", n_ptr->bclink.acked);
- tipc_printf(TIPC_OUTPUT, "Last in: %u, ", n_ptr->bclink.last_in);
- tipc_printf(TIPC_OUTPUT, "Gap after: %u, ", n_ptr->bclink.gap_after);
- tipc_printf(TIPC_OUTPUT, "Gap to: %u\n", n_ptr->bclink.gap_to);
- tipc_printf(TIPC_OUTPUT, "Nack sync: %u\n\n", n_ptr->bclink.nack_sync);
-
- tipc_k_signal((Handler)link_reset_all, (unsigned long)n_ptr->addr);
-
- tipc_node_unlock(n_ptr);
-
- l_ptr->stale_count = 0;
- }
-}
-