diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/link.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 877d94f34814..2c6e1b9e024b 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -807,7 +807,7 @@ void link_prepare_wakeup(struct tipc_link *l) | |||
807 | 807 | ||
808 | skb_queue_walk_safe(&l->wakeupq, skb, tmp) { | 808 | skb_queue_walk_safe(&l->wakeupq, skb, tmp) { |
809 | imp = TIPC_SKB_CB(skb)->chain_imp; | 809 | imp = TIPC_SKB_CB(skb)->chain_imp; |
810 | lim = l->window + l->backlog[imp].limit; | 810 | lim = l->backlog[imp].limit; |
811 | pnd[imp] += TIPC_SKB_CB(skb)->chain_sz; | 811 | pnd[imp] += TIPC_SKB_CB(skb)->chain_sz; |
812 | if ((pnd[imp] + l->backlog[imp].len) >= lim) | 812 | if ((pnd[imp] + l->backlog[imp].len) >= lim) |
813 | break; | 813 | break; |
@@ -873,9 +873,11 @@ int tipc_link_xmit(struct tipc_link *l, struct sk_buff_head *list, | |||
873 | struct sk_buff *skb, *_skb, *bskb; | 873 | struct sk_buff *skb, *_skb, *bskb; |
874 | 874 | ||
875 | /* Match msg importance against this and all higher backlog limits: */ | 875 | /* Match msg importance against this and all higher backlog limits: */ |
876 | for (i = imp; i <= TIPC_SYSTEM_IMPORTANCE; i++) { | 876 | if (!skb_queue_empty(backlogq)) { |
877 | if (unlikely(l->backlog[i].len >= l->backlog[i].limit)) | 877 | for (i = imp; i <= TIPC_SYSTEM_IMPORTANCE; i++) { |
878 | return link_schedule_user(l, list); | 878 | if (unlikely(l->backlog[i].len >= l->backlog[i].limit)) |
879 | return link_schedule_user(l, list); | ||
880 | } | ||
879 | } | 881 | } |
880 | if (unlikely(msg_size(hdr) > mtu)) { | 882 | if (unlikely(msg_size(hdr) > mtu)) { |
881 | skb_queue_purge(list); | 883 | skb_queue_purge(list); |
@@ -1692,10 +1694,10 @@ void tipc_link_set_queue_limits(struct tipc_link *l, u32 win) | |||
1692 | int max_bulk = TIPC_MAX_PUBLICATIONS / (l->mtu / ITEM_SIZE); | 1694 | int max_bulk = TIPC_MAX_PUBLICATIONS / (l->mtu / ITEM_SIZE); |
1693 | 1695 | ||
1694 | l->window = win; | 1696 | l->window = win; |
1695 | l->backlog[TIPC_LOW_IMPORTANCE].limit = win / 2; | 1697 | l->backlog[TIPC_LOW_IMPORTANCE].limit = max_t(u16, 50, win); |
1696 | l->backlog[TIPC_MEDIUM_IMPORTANCE].limit = win; | 1698 | l->backlog[TIPC_MEDIUM_IMPORTANCE].limit = max_t(u16, 100, win * 2); |
1697 | l->backlog[TIPC_HIGH_IMPORTANCE].limit = win / 2 * 3; | 1699 | l->backlog[TIPC_HIGH_IMPORTANCE].limit = max_t(u16, 150, win * 3); |
1698 | l->backlog[TIPC_CRITICAL_IMPORTANCE].limit = win * 2; | 1700 | l->backlog[TIPC_CRITICAL_IMPORTANCE].limit = max_t(u16, 200, win * 4); |
1699 | l->backlog[TIPC_SYSTEM_IMPORTANCE].limit = max_bulk; | 1701 | l->backlog[TIPC_SYSTEM_IMPORTANCE].limit = max_bulk; |
1700 | } | 1702 | } |
1701 | 1703 | ||