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); |
