diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 7e0036f5a364..bc49120bfb44 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -35,6 +35,7 @@ | |||
35 | */ | 35 | */ |
36 | 36 | ||
37 | #include "core.h" | 37 | #include "core.h" |
38 | #include "subscr.h" | ||
38 | #include "link.h" | 39 | #include "link.h" |
39 | #include "bcast.h" | 40 | #include "bcast.h" |
40 | #include "socket.h" | 41 | #include "socket.h" |
@@ -305,12 +306,10 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, | |||
305 | msg_set_session(msg, (tn->random & 0xffff)); | 306 | msg_set_session(msg, (tn->random & 0xffff)); |
306 | msg_set_bearer_id(msg, b_ptr->identity); | 307 | msg_set_bearer_id(msg, b_ptr->identity); |
307 | strcpy((char *)msg_data(msg), if_name); | 308 | strcpy((char *)msg_data(msg), if_name); |
308 | |||
309 | l_ptr->priority = b_ptr->priority; | ||
310 | tipc_link_set_queue_limits(l_ptr, b_ptr->window); | ||
311 | |||
312 | l_ptr->net_plane = b_ptr->net_plane; | 309 | l_ptr->net_plane = b_ptr->net_plane; |
313 | link_init_max_pkt(l_ptr); | 310 | link_init_max_pkt(l_ptr); |
311 | l_ptr->priority = b_ptr->priority; | ||
312 | tipc_link_set_queue_limits(l_ptr, b_ptr->window); | ||
314 | 313 | ||
315 | l_ptr->next_out_no = 1; | 314 | l_ptr->next_out_no = 1; |
316 | __skb_queue_head_init(&l_ptr->transmq); | 315 | __skb_queue_head_init(&l_ptr->transmq); |
@@ -708,7 +707,7 @@ static int tipc_link_cong(struct tipc_link *link, struct sk_buff_head *list) | |||
708 | { | 707 | { |
709 | struct sk_buff *skb = skb_peek(list); | 708 | struct sk_buff *skb = skb_peek(list); |
710 | struct tipc_msg *msg = buf_msg(skb); | 709 | struct tipc_msg *msg = buf_msg(skb); |
711 | uint imp = tipc_msg_tot_importance(msg); | 710 | int imp = msg_importance(msg); |
712 | u32 oport = msg_tot_origport(msg); | 711 | u32 oport = msg_tot_origport(msg); |
713 | 712 | ||
714 | if (unlikely(imp > TIPC_CRITICAL_IMPORTANCE)) { | 713 | if (unlikely(imp > TIPC_CRITICAL_IMPORTANCE)) { |
@@ -745,7 +744,7 @@ int __tipc_link_xmit(struct net *net, struct tipc_link *link, | |||
745 | { | 744 | { |
746 | struct tipc_msg *msg = buf_msg(skb_peek(list)); | 745 | struct tipc_msg *msg = buf_msg(skb_peek(list)); |
747 | unsigned int maxwin = link->window; | 746 | unsigned int maxwin = link->window; |
748 | uint imp = tipc_msg_tot_importance(msg); | 747 | unsigned int imp = msg_importance(msg); |
749 | uint mtu = link->max_pkt; | 748 | uint mtu = link->max_pkt; |
750 | uint ack = mod(link->next_in_no - 1); | 749 | uint ack = mod(link->next_in_no - 1); |
751 | uint seqno = link->next_out_no; | 750 | uint seqno = link->next_out_no; |
@@ -755,7 +754,7 @@ int __tipc_link_xmit(struct net *net, struct tipc_link *link, | |||
755 | struct sk_buff_head *backlogq = &link->backlogq; | 754 | struct sk_buff_head *backlogq = &link->backlogq; |
756 | struct sk_buff *skb, *tmp; | 755 | struct sk_buff *skb, *tmp; |
757 | 756 | ||
758 | /* Match queue limits against msg importance: */ | 757 | /* Match queue limit against msg importance: */ |
759 | if (unlikely(skb_queue_len(backlogq) >= link->queue_limit[imp])) | 758 | if (unlikely(skb_queue_len(backlogq) >= link->queue_limit[imp])) |
760 | return tipc_link_cong(link, list); | 759 | return tipc_link_cong(link, list); |
761 | 760 | ||
@@ -1811,25 +1810,16 @@ static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tol) | |||
1811 | l_ptr->abort_limit = tol / (jiffies_to_msecs(l_ptr->cont_intv) / 4); | 1810 | l_ptr->abort_limit = tol / (jiffies_to_msecs(l_ptr->cont_intv) / 4); |
1812 | } | 1811 | } |
1813 | 1812 | ||
1814 | void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window) | 1813 | void tipc_link_set_queue_limits(struct tipc_link *l, u32 win) |
1815 | { | 1814 | { |
1816 | l_ptr->window = window; | 1815 | int max_bulk = TIPC_MAX_PUBLICATIONS / (l->max_pkt / ITEM_SIZE); |
1817 | 1816 | ||
1818 | /* Data messages from this node, inclusive FIRST_FRAGM */ | 1817 | l->window = win; |
1819 | l_ptr->queue_limit[TIPC_LOW_IMPORTANCE] = window; | 1818 | l->queue_limit[TIPC_LOW_IMPORTANCE] = win / 2; |
1820 | l_ptr->queue_limit[TIPC_MEDIUM_IMPORTANCE] = (window / 3) * 4; | 1819 | l->queue_limit[TIPC_MEDIUM_IMPORTANCE] = win; |
1821 | l_ptr->queue_limit[TIPC_HIGH_IMPORTANCE] = (window / 3) * 5; | 1820 | l->queue_limit[TIPC_HIGH_IMPORTANCE] = win / 2 * 3; |
1822 | l_ptr->queue_limit[TIPC_CRITICAL_IMPORTANCE] = (window / 3) * 6; | 1821 | l->queue_limit[TIPC_CRITICAL_IMPORTANCE] = win * 2; |
1823 | /* Transiting data messages,inclusive FIRST_FRAGM */ | 1822 | l->queue_limit[TIPC_SYSTEM_IMPORTANCE] = max_bulk; |
1824 | l_ptr->queue_limit[TIPC_LOW_IMPORTANCE + 4] = 300; | ||
1825 | l_ptr->queue_limit[TIPC_MEDIUM_IMPORTANCE + 4] = 600; | ||
1826 | l_ptr->queue_limit[TIPC_HIGH_IMPORTANCE + 4] = 900; | ||
1827 | l_ptr->queue_limit[TIPC_CRITICAL_IMPORTANCE + 4] = 1200; | ||
1828 | l_ptr->queue_limit[CONN_MANAGER] = 1200; | ||
1829 | l_ptr->queue_limit[CHANGEOVER_PROTOCOL] = 2500; | ||
1830 | l_ptr->queue_limit[NAME_DISTRIBUTOR] = 3000; | ||
1831 | /* FRAGMENT and LAST_FRAGMENT packets */ | ||
1832 | l_ptr->queue_limit[MSG_FRAGMENTER] = 4000; | ||
1833 | } | 1823 | } |
1834 | 1824 | ||
1835 | /* tipc_link_find_owner - locate owner node of link by link's name | 1825 | /* tipc_link_find_owner - locate owner node of link by link's name |