diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index dd4c18b9a35b..1a7e4665af80 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -378,8 +378,8 @@ static void link_timeout(struct link *l_ptr) | |||
378 | struct tipc_msg *msg = buf_msg(l_ptr->first_out); | 378 | struct tipc_msg *msg = buf_msg(l_ptr->first_out); |
379 | u32 length = msg_size(msg); | 379 | u32 length = msg_size(msg); |
380 | 380 | ||
381 | if ((msg_user(msg) == MSG_FRAGMENTER) | 381 | if ((msg_user(msg) == MSG_FRAGMENTER) && |
382 | && (msg_type(msg) == FIRST_FRAGMENT)) { | 382 | (msg_type(msg) == FIRST_FRAGMENT)) { |
383 | length = msg_size(msg_get_wrapped(msg)); | 383 | length = msg_size(msg_get_wrapped(msg)); |
384 | } | 384 | } |
385 | if (length) { | 385 | if (length) { |
@@ -1882,6 +1882,15 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *tb_ptr) | |||
1882 | (msg_destnode(msg) != tipc_own_addr))) | 1882 | (msg_destnode(msg) != tipc_own_addr))) |
1883 | goto cont; | 1883 | goto cont; |
1884 | 1884 | ||
1885 | /* Discard non-routeable messages destined for another node */ | ||
1886 | |||
1887 | if (unlikely(!msg_isdata(msg) && | ||
1888 | (msg_destnode(msg) != tipc_own_addr))) { | ||
1889 | if ((msg_user(msg) != CONN_MANAGER) && | ||
1890 | (msg_user(msg) != MSG_FRAGMENTER)) | ||
1891 | goto cont; | ||
1892 | } | ||
1893 | |||
1885 | /* Locate unicast link endpoint that should handle message */ | 1894 | /* Locate unicast link endpoint that should handle message */ |
1886 | 1895 | ||
1887 | n_ptr = tipc_node_find(msg_prevnode(msg)); | 1896 | n_ptr = tipc_node_find(msg_prevnode(msg)); |
@@ -2788,8 +2797,8 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb, | |||
2788 | 2797 | ||
2789 | /* Is there an incomplete message waiting for this fragment? */ | 2798 | /* Is there an incomplete message waiting for this fragment? */ |
2790 | 2799 | ||
2791 | while (pbuf && ((msg_seqno(buf_msg(pbuf)) != long_msg_seq_no) | 2800 | while (pbuf && ((msg_seqno(buf_msg(pbuf)) != long_msg_seq_no) || |
2792 | || (msg_orignode(fragm) != msg_orignode(buf_msg(pbuf))))) { | 2801 | (msg_orignode(fragm) != msg_orignode(buf_msg(pbuf))))) { |
2793 | prev = pbuf; | 2802 | prev = pbuf; |
2794 | pbuf = pbuf->next; | 2803 | pbuf = pbuf->next; |
2795 | } | 2804 | } |
@@ -3325,8 +3334,8 @@ static void link_print(struct link *l_ptr, struct print_buf *buf, | |||
3325 | (l_ptr->last_out)), l_ptr->out_queue_size); | 3334 | (l_ptr->last_out)), l_ptr->out_queue_size); |
3326 | if ((mod(msg_seqno(buf_msg(l_ptr->last_out)) - | 3335 | if ((mod(msg_seqno(buf_msg(l_ptr->last_out)) - |
3327 | msg_seqno(buf_msg(l_ptr->first_out))) | 3336 | msg_seqno(buf_msg(l_ptr->first_out))) |
3328 | != (l_ptr->out_queue_size - 1)) | 3337 | != (l_ptr->out_queue_size - 1)) || |
3329 | || (l_ptr->last_out->next != NULL)) { | 3338 | (l_ptr->last_out->next != NULL)) { |
3330 | tipc_printf(buf, "\nSend queue inconsistency\n"); | 3339 | tipc_printf(buf, "\nSend queue inconsistency\n"); |
3331 | tipc_printf(buf, "first_out= %x ", l_ptr->first_out); | 3340 | tipc_printf(buf, "first_out= %x ", l_ptr->first_out); |
3332 | tipc_printf(buf, "next_out= %x ", l_ptr->next_out); | 3341 | tipc_printf(buf, "next_out= %x ", l_ptr->next_out); |