@@ -136,34 +136,6 @@ static struct tipc_link *tipc_parallel_link(struct tipc_link *l)
136
136
return l -> owner -> active_links [1 ];
137
137
}
138
138
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
-
167
139
/*
168
140
* Simple non-static link routines (i.e. referenced outside this file)
169
141
*/
@@ -304,7 +276,8 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
304
276
msg_set_bearer_id (msg , b_ptr -> identity );
305
277
strcpy ((char * )msg_data (msg ), if_name );
306
278
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 ;
308
281
l_ptr -> priority = b_ptr -> priority ;
309
282
tipc_link_set_queue_limits (l_ptr , b_ptr -> window );
310
283
l_ptr -> next_out_no = 1 ;
@@ -465,8 +438,8 @@ void tipc_link_reset(struct tipc_link *l_ptr)
465
438
/* Link is down, accept any session */
466
439
l_ptr -> peer_session = INVALID_SESSION ;
467
440
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 ;
470
443
471
444
l_ptr -> state = RESET_UNKNOWN ;
472
445
@@ -563,19 +536,15 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
563
536
l_ptr -> checkpoint = l_ptr -> next_in_no ;
564
537
if (tipc_bclink_acks_missing (l_ptr -> owner )) {
565
538
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 );
571
540
l_ptr -> fsm_msg_cnt ++ ;
572
541
}
573
542
link_set_timer (l_ptr , cont_intv );
574
543
break ;
575
544
}
576
545
l_ptr -> state = WORKING_UNKNOWN ;
577
546
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 );
579
548
l_ptr -> fsm_msg_cnt ++ ;
580
549
link_set_timer (l_ptr , cont_intv / 4 );
581
550
break ;
@@ -586,7 +555,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
586
555
l_ptr -> state = RESET_RESET ;
587
556
l_ptr -> fsm_msg_cnt = 0 ;
588
557
tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
589
- 0 , 0 , 0 , 0 , 0 );
558
+ 0 , 0 , 0 , 0 );
590
559
l_ptr -> fsm_msg_cnt ++ ;
591
560
link_set_timer (l_ptr , cont_intv );
592
561
break ;
@@ -609,7 +578,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
609
578
l_ptr -> state = RESET_RESET ;
610
579
l_ptr -> fsm_msg_cnt = 0 ;
611
580
tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
612
- 0 , 0 , 0 , 0 , 0 );
581
+ 0 , 0 , 0 , 0 );
613
582
l_ptr -> fsm_msg_cnt ++ ;
614
583
link_set_timer (l_ptr , cont_intv );
615
584
break ;
@@ -620,13 +589,13 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
620
589
l_ptr -> checkpoint = l_ptr -> next_in_no ;
621
590
if (tipc_bclink_acks_missing (l_ptr -> owner )) {
622
591
tipc_link_proto_xmit (l_ptr , STATE_MSG ,
623
- 0 , 0 , 0 , 0 , 0 );
592
+ 0 , 0 , 0 , 0 );
624
593
l_ptr -> fsm_msg_cnt ++ ;
625
594
}
626
595
link_set_timer (l_ptr , cont_intv );
627
596
} else if (l_ptr -> fsm_msg_cnt < l_ptr -> abort_limit ) {
628
597
tipc_link_proto_xmit (l_ptr , STATE_MSG ,
629
- 1 , 0 , 0 , 0 , 0 );
598
+ 1 , 0 , 0 , 0 );
630
599
l_ptr -> fsm_msg_cnt ++ ;
631
600
link_set_timer (l_ptr , cont_intv / 4 );
632
601
} else { /* Link has failed */
@@ -636,7 +605,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
636
605
l_ptr -> state = RESET_UNKNOWN ;
637
606
l_ptr -> fsm_msg_cnt = 0 ;
638
607
tipc_link_proto_xmit (l_ptr , RESET_MSG ,
639
- 0 , 0 , 0 , 0 , 0 );
608
+ 0 , 0 , 0 , 0 );
640
609
l_ptr -> fsm_msg_cnt ++ ;
641
610
link_set_timer (l_ptr , cont_intv );
642
611
}
@@ -656,7 +625,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
656
625
l_ptr -> state = WORKING_WORKING ;
657
626
l_ptr -> fsm_msg_cnt = 0 ;
658
627
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 );
660
629
l_ptr -> fsm_msg_cnt ++ ;
661
630
if (l_ptr -> owner -> working_links == 1 )
662
631
tipc_link_sync_xmit (l_ptr );
@@ -666,7 +635,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
666
635
l_ptr -> state = RESET_RESET ;
667
636
l_ptr -> fsm_msg_cnt = 0 ;
668
637
tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
669
- 1 , 0 , 0 , 0 , 0 );
638
+ 1 , 0 , 0 , 0 );
670
639
l_ptr -> fsm_msg_cnt ++ ;
671
640
link_set_timer (l_ptr , cont_intv );
672
641
break ;
@@ -676,7 +645,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
676
645
link_set_timer (l_ptr , cont_intv );
677
646
break ;
678
647
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 );
680
649
l_ptr -> fsm_msg_cnt ++ ;
681
650
link_set_timer (l_ptr , cont_intv );
682
651
break ;
@@ -694,7 +663,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
694
663
l_ptr -> state = WORKING_WORKING ;
695
664
l_ptr -> fsm_msg_cnt = 0 ;
696
665
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 );
698
667
l_ptr -> fsm_msg_cnt ++ ;
699
668
if (l_ptr -> owner -> working_links == 1 )
700
669
tipc_link_sync_xmit (l_ptr );
@@ -704,7 +673,7 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event)
704
673
break ;
705
674
case TIMEOUT_EVT :
706
675
tipc_link_proto_xmit (l_ptr , ACTIVATE_MSG ,
707
- 0 , 0 , 0 , 0 , 0 );
676
+ 0 , 0 , 0 , 0 );
708
677
l_ptr -> fsm_msg_cnt ++ ;
709
678
link_set_timer (l_ptr , cont_intv );
710
679
break ;
@@ -733,7 +702,7 @@ int __tipc_link_xmit(struct net *net, struct tipc_link *link,
733
702
struct tipc_msg * msg = buf_msg (skb_peek (list ));
734
703
unsigned int maxwin = link -> window ;
735
704
unsigned int imp = msg_importance (msg );
736
- uint mtu = link -> max_pkt ;
705
+ uint mtu = link -> mtu ;
737
706
uint ack = mod (link -> next_in_no - 1 );
738
707
uint seqno = link -> next_out_no ;
739
708
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)
1187
1156
link_retrieve_defq (l_ptr , & head );
1188
1157
if (unlikely (++ l_ptr -> rcv_unacked >= TIPC_MIN_LINK_WIN )) {
1189
1158
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 );
1191
1160
}
1192
1161
tipc_link_input (l_ptr , skb );
1193
1162
skb = NULL ;
@@ -1362,7 +1331,7 @@ static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr,
1362
1331
if (tipc_link_defer_pkt (& l_ptr -> deferdq , buf )) {
1363
1332
l_ptr -> stats .deferred_recv ++ ;
1364
1333
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 );
1366
1335
} else {
1367
1336
l_ptr -> stats .duplicates ++ ;
1368
1337
}
@@ -1372,7 +1341,7 @@ static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr,
1372
1341
* Send protocol message to the other endpoint.
1373
1342
*/
1374
1343
void 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 )
1376
1345
{
1377
1346
struct sk_buff * buf = NULL ;
1378
1347
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,
1410
1379
l_ptr -> stats .sent_nacks ++ ;
1411
1380
msg_set_link_tolerance (msg , tolerance );
1412
1381
msg_set_linkprio (msg , priority );
1413
- msg_set_max_pkt (msg , ack_mtu );
1382
+ msg_set_max_pkt (msg , l_ptr -> mtu );
1414
1383
msg_set_ack (msg , mod (l_ptr -> next_in_no - 1 ));
1415
1384
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 )
1431
1386
l_ptr -> stats .sent_probes ++ ;
1432
- }
1433
1387
l_ptr -> stats .sent_states ++ ;
1434
1388
} else { /* RESET_MSG or ACTIVATE_MSG */
1435
1389
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,
1438
1392
msg_set_probe (msg , 0 );
1439
1393
msg_set_link_tolerance (msg , l_ptr -> tolerance );
1440
1394
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 );
1442
1396
}
1443
1397
1444
1398
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,
1469
1423
struct sk_buff * buf )
1470
1424
{
1471
1425
u32 rec_gap = 0 ;
1472
- u32 max_pkt_info ;
1473
- u32 max_pkt_ack ;
1474
1426
u32 msg_tol ;
1475
1427
struct tipc_msg * msg = buf_msg (buf );
1476
1428
@@ -1513,15 +1465,8 @@ static void tipc_link_proto_rcv(struct tipc_link *l_ptr,
1513
1465
if (msg_linkprio (msg ) > l_ptr -> priority )
1514
1466
l_ptr -> priority = msg_linkprio (msg );
1515
1467
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 );
1525
1470
1526
1471
/* Synchronize broadcast link info, if not done previously */
1527
1472
if (!tipc_node_is_up (l_ptr -> owner )) {
@@ -1566,27 +1511,17 @@ static void tipc_link_proto_rcv(struct tipc_link *l_ptr,
1566
1511
mod (l_ptr -> next_in_no ));
1567
1512
}
1568
1513
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 ))
1577
1515
l_ptr -> stats .recv_probes ++ ;
1578
- if (msg_size (msg ) > sizeof (l_ptr -> proto_msg ))
1579
- max_pkt_ack = msg_size (msg );
1580
- }
1581
1516
1582
1517
/* Protocol message before retransmits, reduce loss risk */
1583
1518
if (l_ptr -> owner -> bclink .recv_permitted )
1584
1519
tipc_bclink_update_link_state (l_ptr -> owner ,
1585
1520
msg_last_bcast (msg ));
1586
1521
1587
1522
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 );
1590
1525
}
1591
1526
if (msg_seq_gap (msg )) {
1592
1527
l_ptr -> stats .recv_nacks ++ ;
@@ -1816,7 +1751,7 @@ static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tol)
1816
1751
1817
1752
void tipc_link_set_queue_limits (struct tipc_link * l , u32 win )
1818
1753
{
1819
- int max_bulk = TIPC_MAX_PUBLICATIONS / (l -> max_pkt / ITEM_SIZE );
1754
+ int max_bulk = TIPC_MAX_PUBLICATIONS / (l -> mtu / ITEM_SIZE );
1820
1755
1821
1756
l -> window = win ;
1822
1757
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)
1988
1923
1989
1924
tol = nla_get_u32 (props [TIPC_NLA_PROP_TOL ]);
1990
1925
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 );
1992
1927
}
1993
1928
if (props [TIPC_NLA_PROP_PRIO ]) {
1994
1929
u32 prio ;
1995
1930
1996
1931
prio = nla_get_u32 (props [TIPC_NLA_PROP_PRIO ]);
1997
1932
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 );
1999
1934
}
2000
1935
if (props [TIPC_NLA_PROP_WIN ]) {
2001
1936
u32 win ;
@@ -2100,7 +2035,7 @@ static int __tipc_nl_add_link(struct net *net, struct tipc_nl_msg *msg,
2100
2035
if (nla_put_u32 (msg -> skb , TIPC_NLA_LINK_DEST ,
2101
2036
tipc_cluster_mask (tn -> own_addr )))
2102
2037
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 ))
2104
2039
goto attr_msg_full ;
2105
2040
if (nla_put_u32 (msg -> skb , TIPC_NLA_LINK_RX , link -> next_in_no ))
2106
2041
goto attr_msg_full ;
0 commit comments