diff options
author | Jon Paul Maloy <jon.maloy@ericsson.com> | 2015-07-16 23:54:23 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-21 06:41:15 +0300 |
commit | 22d85c79428b8ca9a01623aa3e3a1fe29a30a119 (patch) | |
tree | bc72ee5256301d591616db2270c45929be2d58d6 /net/tipc/bcast.c | |
parent | 36e78a463b26c9b8017a2e11dcd6c4b8e34b4161 (diff) | |
download | linux-22d85c79428b8ca9a01623aa3e3a1fe29a30a119.tar.xz |
tipc: change sk_buffer handling in tipc_link_xmit()
When the function tipc_link_xmit() is given a buffer list for
transmission, it currently consumes the list both when transmission
is successful and when it fails, except for the special case when
it encounters link congestion.
This behavior is inconsistent, and needs to be corrected if we want
to avoid problems in later commits in this series.
In this commit, we change this to let the function consume the list
only when transmission is successful, and leave the list with the
sender in all other cases. We also modifiy the socket code so that
it adapts to this change, i.e., purges the list when a non-congestion
error code is returned.
Reviewed-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/bcast.c')
-rw-r--r-- | net/tipc/bcast.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 59b2f2a538e1..295bdc26f103 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c @@ -358,10 +358,9 @@ int tipc_bclink_xmit(struct net *net, struct sk_buff_head *list) /* Prepare clone of message for local node */ skb = tipc_msg_reassemble(list); - if (unlikely(!skb)) { - __skb_queue_purge(list); + if (unlikely(!skb)) return -EHOSTUNREACH; - } + /* Broadcast to all nodes */ if (likely(bclink)) { tipc_bclink_lock(net); |