aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/link.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r--net/tipc/link.c40
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
1814void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window) 1813void 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