diff options
Diffstat (limited to 'net/tipc/bcast.c')
| -rw-r--r-- | net/tipc/bcast.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 716de1ac6cb5..bf860d9e75af 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c | |||
| @@ -480,18 +480,24 @@ receive: | |||
| 480 | tipc_node_unlock(node); | 480 | tipc_node_unlock(node); |
| 481 | tipc_link_recv_bundle(buf); | 481 | tipc_link_recv_bundle(buf); |
| 482 | } else if (msg_user(msg) == MSG_FRAGMENTER) { | 482 | } else if (msg_user(msg) == MSG_FRAGMENTER) { |
| 483 | int ret = tipc_link_recv_fragment(&node->bclink.defragm, | 483 | int ret; |
| 484 | &buf, &msg); | 484 | ret = tipc_link_recv_fragment(&node->bclink.reasm_head, |
| 485 | if (ret < 0) | 485 | &node->bclink.reasm_tail, |
| 486 | &buf); | ||
| 487 | if (ret == LINK_REASM_ERROR) | ||
| 486 | goto unlock; | 488 | goto unlock; |
| 487 | spin_lock_bh(&bc_lock); | 489 | spin_lock_bh(&bc_lock); |
| 488 | bclink_accept_pkt(node, seqno); | 490 | bclink_accept_pkt(node, seqno); |
| 489 | bcl->stats.recv_fragments++; | 491 | bcl->stats.recv_fragments++; |
| 490 | if (ret > 0) | 492 | if (ret == LINK_REASM_COMPLETE) { |
| 491 | bcl->stats.recv_fragmented++; | 493 | bcl->stats.recv_fragmented++; |
| 494 | /* Point msg to inner header */ | ||
| 495 | msg = buf_msg(buf); | ||
| 496 | spin_unlock_bh(&bc_lock); | ||
| 497 | goto receive; | ||
| 498 | } | ||
| 492 | spin_unlock_bh(&bc_lock); | 499 | spin_unlock_bh(&bc_lock); |
| 493 | tipc_node_unlock(node); | 500 | tipc_node_unlock(node); |
| 494 | tipc_net_route_msg(buf); | ||
| 495 | } else if (msg_user(msg) == NAME_DISTRIBUTOR) { | 501 | } else if (msg_user(msg) == NAME_DISTRIBUTOR) { |
| 496 | spin_lock_bh(&bc_lock); | 502 | spin_lock_bh(&bc_lock); |
| 497 | bclink_accept_pkt(node, seqno); | 503 | bclink_accept_pkt(node, seqno); |
| @@ -615,12 +621,6 @@ static int tipc_bcbearer_send(struct sk_buff *buf, struct tipc_bearer *unused1, | |||
| 615 | if (!p) | 621 | if (!p) |
| 616 | break; /* No more bearers to try */ | 622 | break; /* No more bearers to try */ |
| 617 | 623 | ||
| 618 | if (tipc_bearer_blocked(p)) { | ||
| 619 | if (!s || tipc_bearer_blocked(s)) | ||
| 620 | continue; /* Can't use either bearer */ | ||
| 621 | b = s; | ||
| 622 | } | ||
| 623 | |||
| 624 | tipc_nmap_diff(&bcbearer->remains, &b->nodes, | 624 | tipc_nmap_diff(&bcbearer->remains, &b->nodes, |
| 625 | &bcbearer->remains_new); | 625 | &bcbearer->remains_new); |
| 626 | if (bcbearer->remains_new.count == bcbearer->remains.count) | 626 | if (bcbearer->remains_new.count == bcbearer->remains.count) |
| @@ -794,7 +794,7 @@ void tipc_bclink_init(void) | |||
| 794 | void tipc_bclink_stop(void) | 794 | void tipc_bclink_stop(void) |
| 795 | { | 795 | { |
| 796 | spin_lock_bh(&bc_lock); | 796 | spin_lock_bh(&bc_lock); |
| 797 | tipc_link_stop(bcl); | 797 | tipc_link_purge_queues(bcl); |
| 798 | spin_unlock_bh(&bc_lock); | 798 | spin_unlock_bh(&bc_lock); |
| 799 | 799 | ||
| 800 | memset(bclink, 0, sizeof(*bclink)); | 800 | memset(bclink, 0, sizeof(*bclink)); |
