@@ -136,34 +136,6 @@ static struct tipc_link *tipc_parallel_link(struct tipc_link *l)
136136	return  l -> owner -> active_links [1 ];
137137}
138138
139- static  void  link_init_max_pkt (struct  tipc_link  * l_ptr )
140- {
141- 	struct  tipc_node  * node  =  l_ptr -> owner ;
142- 	struct  tipc_net  * tn  =  net_generic (node -> net , tipc_net_id );
143- 	struct  tipc_bearer  * b_ptr ;
144- 	u32  max_pkt ;
145- 
146- 	rcu_read_lock ();
147- 	b_ptr  =  rcu_dereference_rtnl (tn -> bearer_list [l_ptr -> bearer_id ]);
148- 	if  (!b_ptr ) {
149- 		rcu_read_unlock ();
150- 		return ;
151- 	}
152- 	max_pkt  =  (b_ptr -> mtu  &  ~3 );
153- 	rcu_read_unlock ();
154- 
155- 	if  (max_pkt  >  MAX_MSG_SIZE )
156- 		max_pkt  =  MAX_MSG_SIZE ;
157- 
158- 	l_ptr -> max_pkt_target  =  max_pkt ;
159- 	if  (l_ptr -> max_pkt_target  <  MAX_PKT_DEFAULT )
160- 		l_ptr -> max_pkt  =  l_ptr -> max_pkt_target ;
161- 	else 
162- 		l_ptr -> max_pkt  =  MAX_PKT_DEFAULT ;
163- 
164- 	l_ptr -> max_pkt_probes  =  0 ;
165- }
166- 
167139/* 
168140 *  Simple non-static link routines (i.e. referenced outside this file) 
169141 */ 
@@ -304,7 +276,8 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
304276	msg_set_bearer_id (msg , b_ptr -> identity );
305277	strcpy ((char  * )msg_data (msg ), if_name );
306278	l_ptr -> net_plane  =  b_ptr -> net_plane ;
307- 	link_init_max_pkt (l_ptr );
279+ 	l_ptr -> advertised_mtu  =  b_ptr -> mtu ;
280+ 	l_ptr -> mtu  =  l_ptr -> advertised_mtu ;
308281	l_ptr -> priority  =  b_ptr -> priority ;
309282	tipc_link_set_queue_limits (l_ptr , b_ptr -> window );
310283	l_ptr -> next_out_no  =  1 ;
@@ -465,8 +438,8 @@ void tipc_link_reset(struct tipc_link *l_ptr)
465438	/* Link is down, accept any session */ 
466439	l_ptr -> peer_session  =  INVALID_SESSION ;
467440
468- 	/* Prepare for max packet  size negotiation */ 
469- 	link_init_max_pkt ( l_ptr ) ;
441+ 	/* Prepare for renewed mtu  size negotiation */ 
442+ 	l_ptr -> mtu   =   l_ptr -> advertised_mtu ;
470443
471444	l_ptr -> state  =  RESET_UNKNOWN ;
472445
@@ -563,19 +536,15 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
563536				l_ptr -> checkpoint  =  l_ptr -> next_in_no ;
564537				if  (tipc_bclink_acks_missing (l_ptr -> owner )) {
565538					tipc_link_proto_xmit (l_ptr , STATE_MSG ,
566- 							     0 , 0 , 0 , 0 , 0 );
567- 					l_ptr -> fsm_msg_cnt ++ ;
568- 				} else  if  (l_ptr -> max_pkt  <  l_ptr -> max_pkt_target ) {
569- 					tipc_link_proto_xmit (l_ptr , STATE_MSG ,
570- 							     1 , 0 , 0 , 0 , 0 );
539+ 							     0 , 0 , 0 , 0 );
571540					l_ptr -> fsm_msg_cnt ++ ;
572541				}
573542				link_set_timer (l_ptr , cont_intv );
574543				break ;
575544			}
576545			l_ptr -> state  =  WORKING_UNKNOWN ;
577546			l_ptr -> fsm_msg_cnt  =  0 ;
578- 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 1 , 0 , 0 , 0 ,  0 );
547+ 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 1 , 0 , 0 , 0 );
579548			l_ptr -> fsm_msg_cnt ++ ;
580549			link_set_timer (l_ptr , cont_intv  / 4 );
581550			break ;
@@ -586,7 +555,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
586555			l_ptr -> state  =  RESET_RESET ;
587556			l_ptr -> fsm_msg_cnt  =  0 ;
588557			tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
589- 					     0 , 0 , 0 , 0 ,  0 );
558+ 					     0 , 0 , 0 , 0 );
590559			l_ptr -> fsm_msg_cnt ++ ;
591560			link_set_timer (l_ptr , cont_intv );
592561			break ;
@@ -609,7 +578,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
609578			l_ptr -> state  =  RESET_RESET ;
610579			l_ptr -> fsm_msg_cnt  =  0 ;
611580			tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
612- 					     0 , 0 , 0 , 0 ,  0 );
581+ 					     0 , 0 , 0 , 0 );
613582			l_ptr -> fsm_msg_cnt ++ ;
614583			link_set_timer (l_ptr , cont_intv );
615584			break ;
@@ -620,13 +589,13 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
620589				l_ptr -> checkpoint  =  l_ptr -> next_in_no ;
621590				if  (tipc_bclink_acks_missing (l_ptr -> owner )) {
622591					tipc_link_proto_xmit (l_ptr , STATE_MSG ,
623- 							     0 , 0 , 0 , 0 ,  0 );
592+ 							     0 , 0 , 0 , 0 );
624593					l_ptr -> fsm_msg_cnt ++ ;
625594				}
626595				link_set_timer (l_ptr , cont_intv );
627596			} else  if  (l_ptr -> fsm_msg_cnt  <  l_ptr -> abort_limit ) {
628597				tipc_link_proto_xmit (l_ptr , STATE_MSG ,
629- 						     1 , 0 , 0 , 0 ,  0 );
598+ 						     1 , 0 , 0 , 0 );
630599				l_ptr -> fsm_msg_cnt ++ ;
631600				link_set_timer (l_ptr , cont_intv  / 4 );
632601			} else  {	/* Link has failed */ 
@@ -636,7 +605,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
636605				l_ptr -> state  =  RESET_UNKNOWN ;
637606				l_ptr -> fsm_msg_cnt  =  0 ;
638607				tipc_link_proto_xmit (l_ptr , RESET_MSG ,
639- 						     0 , 0 , 0 , 0 ,  0 );
608+ 						     0 , 0 , 0 , 0 );
640609				l_ptr -> fsm_msg_cnt ++ ;
641610				link_set_timer (l_ptr , cont_intv );
642611			}
@@ -656,7 +625,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
656625			l_ptr -> state  =  WORKING_WORKING ;
657626			l_ptr -> fsm_msg_cnt  =  0 ;
658627			link_activate (l_ptr );
659- 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 1 , 0 , 0 , 0 ,  0 );
628+ 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 1 , 0 , 0 , 0 );
660629			l_ptr -> fsm_msg_cnt ++ ;
661630			if  (l_ptr -> owner -> working_links  ==  1 )
662631				tipc_link_sync_xmit (l_ptr );
@@ -666,7 +635,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
666635			l_ptr -> state  =  RESET_RESET ;
667636			l_ptr -> fsm_msg_cnt  =  0 ;
668637			tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
669- 					     1 , 0 , 0 , 0 ,  0 );
638+ 					     1 , 0 , 0 , 0 );
670639			l_ptr -> fsm_msg_cnt ++ ;
671640			link_set_timer (l_ptr , cont_intv );
672641			break ;
@@ -676,7 +645,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
676645			link_set_timer (l_ptr , cont_intv );
677646			break ;
678647		case  TIMEOUT_EVT :
679- 			tipc_link_proto_xmit (l_ptr , RESET_MSG , 0 , 0 , 0 , 0 ,  0 );
648+ 			tipc_link_proto_xmit (l_ptr , RESET_MSG , 0 , 0 , 0 , 0 );
680649			l_ptr -> fsm_msg_cnt ++ ;
681650			link_set_timer (l_ptr , cont_intv );
682651			break ;
@@ -694,7 +663,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
694663			l_ptr -> state  =  WORKING_WORKING ;
695664			l_ptr -> fsm_msg_cnt  =  0 ;
696665			link_activate (l_ptr );
697- 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 1 , 0 , 0 , 0 ,  0 );
666+ 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 1 , 0 , 0 , 0 );
698667			l_ptr -> fsm_msg_cnt ++ ;
699668			if  (l_ptr -> owner -> working_links  ==  1 )
700669				tipc_link_sync_xmit (l_ptr );
@@ -704,7 +673,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
704673			break ;
705674		case  TIMEOUT_EVT :
706675			tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
707- 					     0 , 0 , 0 , 0 ,  0 );
676+ 					     0 , 0 , 0 , 0 );
708677			l_ptr -> fsm_msg_cnt ++ ;
709678			link_set_timer (l_ptr , cont_intv );
710679			break ;
@@ -733,7 +702,7 @@ int __tipc_link_xmit(struct net *net, struct tipc_link *link,
733702	struct  tipc_msg  * msg  =  buf_msg (skb_peek (list ));
734703	unsigned int   maxwin  =  link -> window ;
735704	unsigned int   imp  =  msg_importance (msg );
736- 	uint  mtu  =  link -> max_pkt ;
705+ 	uint  mtu  =  link -> mtu ;
737706	uint  ack  =  mod (link -> next_in_no  -  1 );
738707	uint  seqno  =  link -> next_out_no ;
739708	uint  bc_last_in  =  link -> owner -> bclink .last_in ;
@@ -1187,7 +1156,7 @@ void tipc_rcv(struct net *net, struct sk_buff *skb, struct tipc_bearer *b_ptr)
11871156			link_retrieve_defq (l_ptr , & head );
11881157		if  (unlikely (++ l_ptr -> rcv_unacked  >= TIPC_MIN_LINK_WIN )) {
11891158			l_ptr -> stats .sent_acks ++ ;
1190- 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 0 , 0 , 0 , 0 ,  0 );
1159+ 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 0 , 0 , 0 , 0 );
11911160		}
11921161		tipc_link_input (l_ptr , skb );
11931162		skb  =  NULL ;
@@ -1362,7 +1331,7 @@ static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr,
13621331	if  (tipc_link_defer_pkt (& l_ptr -> deferdq , buf )) {
13631332		l_ptr -> stats .deferred_recv ++ ;
13641333		if  ((skb_queue_len (& l_ptr -> deferdq ) % TIPC_MIN_LINK_WIN ) ==  1 )
1365- 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 0 , 0 , 0 , 0 ,  0 );
1334+ 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 0 , 0 , 0 , 0 );
13661335	} else  {
13671336		l_ptr -> stats .duplicates ++ ;
13681337	}
@@ -1372,7 +1341,7 @@ static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr,
13721341 * Send protocol message to the other endpoint. 
13731342 */ 
13741343void  tipc_link_proto_xmit (struct  tipc_link  * l_ptr , u32  msg_typ , int  probe_msg ,
1375- 			  u32  gap , u32  tolerance , u32  priority ,  u32   ack_mtu )
1344+ 			  u32  gap , u32  tolerance , u32  priority )
13761345{
13771346	struct  sk_buff  * buf  =  NULL ;
13781347	struct  tipc_msg  * msg  =  l_ptr -> pmsg ;
@@ -1410,26 +1379,11 @@ void tipc_link_proto_xmit(struct tipc_link *l_ptr, u32 msg_typ, int probe_msg,
14101379			l_ptr -> stats .sent_nacks ++ ;
14111380		msg_set_link_tolerance (msg , tolerance );
14121381		msg_set_linkprio (msg , priority );
1413- 		msg_set_max_pkt (msg , ack_mtu );
1382+ 		msg_set_max_pkt (msg , l_ptr -> mtu );
14141383		msg_set_ack (msg , mod (l_ptr -> next_in_no  -  1 ));
14151384		msg_set_probe (msg , probe_msg  !=  0 );
1416- 		if  (probe_msg ) {
1417- 			u32  mtu  =  l_ptr -> max_pkt ;
1418- 
1419- 			if  ((mtu  <  l_ptr -> max_pkt_target ) && 
1420- 			    link_working_working (l_ptr ) && 
1421- 			    l_ptr -> fsm_msg_cnt ) {
1422- 				msg_size  =  (mtu  +  (l_ptr -> max_pkt_target  -  mtu )/2  +  2 ) &  ~3 ;
1423- 				if  (l_ptr -> max_pkt_probes  ==  10 ) {
1424- 					l_ptr -> max_pkt_target  =  (msg_size  -  4 );
1425- 					l_ptr -> max_pkt_probes  =  0 ;
1426- 					msg_size  =  (mtu  +  (l_ptr -> max_pkt_target  -  mtu )/2  +  2 ) &  ~3 ;
1427- 				}
1428- 				l_ptr -> max_pkt_probes ++ ;
1429- 			}
1430- 
1385+ 		if  (probe_msg )
14311386			l_ptr -> stats .sent_probes ++ ;
1432- 		}
14331387		l_ptr -> stats .sent_states ++ ;
14341388	} else  {		/* RESET_MSG or ACTIVATE_MSG */ 
14351389		msg_set_ack (msg , mod (l_ptr -> failover_checkpt  -  1 ));
@@ -1438,7 +1392,7 @@ void tipc_link_proto_xmit(struct tipc_link *l_ptr, u32 msg_typ, int probe_msg,
14381392		msg_set_probe (msg , 0 );
14391393		msg_set_link_tolerance (msg , l_ptr -> tolerance );
14401394		msg_set_linkprio (msg , l_ptr -> priority );
1441- 		msg_set_max_pkt (msg , l_ptr -> max_pkt_target );
1395+ 		msg_set_max_pkt (msg , l_ptr -> advertised_mtu );
14421396	}
14431397
14441398	r_flag  =  (l_ptr -> owner -> working_links  >  tipc_link_is_up (l_ptr ));
@@ -1469,8 +1423,6 @@ static void tipc_link_proto_rcv(struct tipc_link *l_ptr,
14691423				struct  sk_buff  * buf )
14701424{
14711425	u32  rec_gap  =  0 ;
1472- 	u32  max_pkt_info ;
1473- 	u32  max_pkt_ack ;
14741426	u32  msg_tol ;
14751427	struct  tipc_msg  * msg  =  buf_msg (buf );
14761428
@@ -1513,15 +1465,8 @@ static void tipc_link_proto_rcv(struct tipc_link *l_ptr,
15131465		if  (msg_linkprio (msg ) >  l_ptr -> priority )
15141466			l_ptr -> priority  =  msg_linkprio (msg );
15151467
1516- 		max_pkt_info  =  msg_max_pkt (msg );
1517- 		if  (max_pkt_info ) {
1518- 			if  (max_pkt_info  <  l_ptr -> max_pkt_target )
1519- 				l_ptr -> max_pkt_target  =  max_pkt_info ;
1520- 			if  (l_ptr -> max_pkt  >  l_ptr -> max_pkt_target )
1521- 				l_ptr -> max_pkt  =  l_ptr -> max_pkt_target ;
1522- 		} else  {
1523- 			l_ptr -> max_pkt  =  l_ptr -> max_pkt_target ;
1524- 		}
1468+ 		if  (l_ptr -> mtu  >  msg_max_pkt (msg ))
1469+ 			l_ptr -> mtu  =  msg_max_pkt (msg );
15251470
15261471		/* Synchronize broadcast link info, if not done previously */ 
15271472		if  (!tipc_node_is_up (l_ptr -> owner )) {
@@ -1566,27 +1511,17 @@ static void tipc_link_proto_rcv(struct tipc_link *l_ptr,
15661511				      mod (l_ptr -> next_in_no ));
15671512		}
15681513
1569- 		max_pkt_ack  =  msg_max_pkt (msg );
1570- 		if  (max_pkt_ack  >  l_ptr -> max_pkt ) {
1571- 			l_ptr -> max_pkt  =  max_pkt_ack ;
1572- 			l_ptr -> max_pkt_probes  =  0 ;
1573- 		}
1574- 
1575- 		max_pkt_ack  =  0 ;
1576- 		if  (msg_probe (msg )) {
1514+ 		if  (msg_probe (msg ))
15771515			l_ptr -> stats .recv_probes ++ ;
1578- 			if  (msg_size (msg ) >  sizeof (l_ptr -> proto_msg ))
1579- 				max_pkt_ack  =  msg_size (msg );
1580- 		}
15811516
15821517		/* Protocol message before retransmits, reduce loss risk */ 
15831518		if  (l_ptr -> owner -> bclink .recv_permitted )
15841519			tipc_bclink_update_link_state (l_ptr -> owner ,
15851520						      msg_last_bcast (msg ));
15861521
15871522		if  (rec_gap  ||  (msg_probe (msg ))) {
1588- 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 0 ,  rec_gap ,  0 , 
1589- 					     0 , max_pkt_ack );
1523+ 			tipc_link_proto_xmit (l_ptr , STATE_MSG , 0 ,
1524+ 					     rec_gap ,  0 , 0 );
15901525		}
15911526		if  (msg_seq_gap (msg )) {
15921527			l_ptr -> stats .recv_nacks ++ ;
@@ -1816,7 +1751,7 @@ static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tol)
18161751
18171752void  tipc_link_set_queue_limits (struct  tipc_link  * l , u32  win )
18181753{
1819- 	int  max_bulk  =  TIPC_MAX_PUBLICATIONS  / (l -> max_pkt  / ITEM_SIZE );
1754+ 	int  max_bulk  =  TIPC_MAX_PUBLICATIONS  / (l -> mtu  / ITEM_SIZE );
18201755
18211756	l -> window  =  win ;
18221757	l -> backlog [TIPC_LOW_IMPORTANCE ].limit       =  win  / 2 ;
@@ -1988,14 +1923,14 @@ int tipc_nl_link_set(struct sk_buff *skb, struct genl_info *info)
19881923
19891924			tol  =  nla_get_u32 (props [TIPC_NLA_PROP_TOL ]);
19901925			link_set_supervision_props (link , tol );
1991- 			tipc_link_proto_xmit (link , STATE_MSG , 0 , 0 , tol , 0 ,  0 );
1926+ 			tipc_link_proto_xmit (link , STATE_MSG , 0 , 0 , tol , 0 );
19921927		}
19931928		if  (props [TIPC_NLA_PROP_PRIO ]) {
19941929			u32  prio ;
19951930
19961931			prio  =  nla_get_u32 (props [TIPC_NLA_PROP_PRIO ]);
19971932			link -> priority  =  prio ;
1998- 			tipc_link_proto_xmit (link , STATE_MSG , 0 , 0 , 0 , prio ,  0 );
1933+ 			tipc_link_proto_xmit (link , STATE_MSG , 0 , 0 , 0 , prio );
19991934		}
20001935		if  (props [TIPC_NLA_PROP_WIN ]) {
20011936			u32  win ;
@@ -2100,7 +2035,7 @@ static int __tipc_nl_add_link(struct net *net, struct tipc_nl_msg *msg,
21002035	if  (nla_put_u32 (msg -> skb , TIPC_NLA_LINK_DEST ,
21012036			tipc_cluster_mask (tn -> own_addr )))
21022037		goto attr_msg_full ;
2103- 	if  (nla_put_u32 (msg -> skb , TIPC_NLA_LINK_MTU , link -> max_pkt ))
2038+ 	if  (nla_put_u32 (msg -> skb , TIPC_NLA_LINK_MTU , link -> mtu ))
21042039		goto attr_msg_full ;
21052040	if  (nla_put_u32 (msg -> skb , TIPC_NLA_LINK_RX , link -> next_in_no ))
21062041		goto attr_msg_full ;
0 commit comments