diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 6f4a6d9b0149..3e513daecf80 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -903,8 +903,10 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list, | |||
903 | if (unlikely(l->backlog[i].len >= l->backlog[i].limit)) | 903 | if (unlikely(l->backlog[i].len >= l->backlog[i].limit)) |
904 | return link_schedule_user(l, list); | 904 | return link_schedule_user(l, list); |
905 | } | 905 | } |
906 | if (unlikely(msg_size(hdr) > mtu)) | 906 | if (unlikely(msg_size(hdr) > mtu)) { |
907 | skb_queue_purge(list); | ||
907 | return -EMSGSIZE; | 908 | return -EMSGSIZE; |
909 | } | ||
908 | 910 | ||
909 | /* Prepare each packet for sending, and add to relevant queue: */ | 911 | /* Prepare each packet for sending, and add to relevant queue: */ |
910 | while (skb_queue_len(list)) { | 912 | while (skb_queue_len(list)) { |
@@ -916,8 +918,10 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list, | |||
916 | 918 | ||
917 | if (likely(skb_queue_len(transmq) < maxwin)) { | 919 | if (likely(skb_queue_len(transmq) < maxwin)) { |
918 | _skb = skb_clone(skb, GFP_ATOMIC); | 920 | _skb = skb_clone(skb, GFP_ATOMIC); |
919 | if (!_skb) | 921 | if (!_skb) { |
922 | skb_queue_purge(list); | ||
920 | return -ENOBUFS; | 923 | return -ENOBUFS; |
924 | } | ||
921 | __skb_dequeue(list); | 925 | __skb_dequeue(list); |
922 | __skb_queue_tail(transmq, skb); | 926 | __skb_queue_tail(transmq, skb); |
923 | __skb_queue_tail(xmitq, _skb); | 927 | __skb_queue_tail(xmitq, _skb); |