Skip to content

Commit

Permalink
tipc: don't reroute message fragments
Browse files Browse the repository at this point in the history
When a message fragment is received in a broadcast or unicast link,
the reception code will append the fragment payload to a big reassembly
buffer through a call to the function tipc_recv_fragm(). However, after
the return of that call, the logics goes on and passes the fragment
buffer to the function tipc_net_route_msg(), which will simply drop it.
This behavior is a remnant from the now obsolete multi-cluster
functionality, and has no relevance in the current code base.

Although currently harmless, this unnecessary call would be fatal
after applying the next patch in this series, which introduces
a completely new reassembly algorithm. So we change the code to
eliminate the redundant call.

Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Reviewed-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Erik Hugne authored and davem330 committed Nov 7, 2013
1 parent b0db7b0 commit 528f6f4
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
6 changes: 4 additions & 2 deletions net/tipc/bcast.c
Original file line number Diff line number Diff line change
Expand Up @@ -487,11 +487,13 @@ void tipc_bclink_recv_pkt(struct sk_buff *buf)
spin_lock_bh(&bc_lock);
bclink_accept_pkt(node, seqno);
bcl->stats.recv_fragments++;
if (ret > 0)
if (ret > 0) {
bcl->stats.recv_fragmented++;
spin_unlock_bh(&bc_lock);
goto receive;
}
spin_unlock_bh(&bc_lock);
tipc_node_unlock(node);
tipc_net_route_msg(buf);
} else if (msg_user(msg) == NAME_DISTRIBUTOR) {
spin_lock_bh(&bc_lock);
bclink_accept_pkt(node, seqno);
Expand Down
3 changes: 2 additions & 1 deletion net/tipc/link.c
Original file line number Diff line number Diff line change
Expand Up @@ -1657,7 +1657,8 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr)
}
if (ret == -1)
l_ptr->next_in_no--;
break;
tipc_node_unlock(n_ptr);
continue;
case CHANGEOVER_PROTOCOL:
type = msg_type(msg);
if (link_recv_changeover_msg(&l_ptr, &buf)) {
Expand Down

0 comments on commit 528f6f4

Please sign in to comment.