@@ -378,14 +378,13 @@ static void tipc_node_calculate_timer(struct tipc_node *n, struct tipc_link *l)
378
378
{
379
379
unsigned long tol = tipc_link_tolerance (l );
380
380
unsigned long intv = ((tol / 4 ) > 500 ) ? 500 : tol / 4 ;
381
- unsigned long keepalive_intv = msecs_to_jiffies (intv );
382
381
383
382
/* Link with lowest tolerance determines timer interval */
384
- if (keepalive_intv < n -> keepalive_intv )
385
- n -> keepalive_intv = keepalive_intv ;
383
+ if (intv < n -> keepalive_intv )
384
+ n -> keepalive_intv = intv ;
386
385
387
- /* Ensure link's abort limit corresponds to current interval */
388
- tipc_link_set_abort_limit (l , tol / jiffies_to_msecs ( n -> keepalive_intv ) );
386
+ /* Ensure link's abort limit corresponds to current tolerance */
387
+ tipc_link_set_abort_limit (l , tol / n -> keepalive_intv );
389
388
}
390
389
391
390
static void tipc_node_delete (struct tipc_node * node )
@@ -526,7 +525,7 @@ static void tipc_node_timeout(unsigned long data)
526
525
if (rc & TIPC_LINK_DOWN_EVT )
527
526
tipc_node_link_down (n , bearer_id , false);
528
527
}
529
- mod_timer (& n -> timer , jiffies + n -> keepalive_intv );
528
+ mod_timer (& n -> timer , jiffies + msecs_to_jiffies ( n -> keepalive_intv ) );
530
529
}
531
530
532
531
/**
@@ -735,6 +734,7 @@ void tipc_node_check_dest(struct net *net, u32 onode,
735
734
bool accept_addr = false;
736
735
bool reset = true;
737
736
char * if_name ;
737
+ unsigned long intv ;
738
738
739
739
* dupl_addr = false;
740
740
* respond = false;
@@ -840,9 +840,11 @@ void tipc_node_check_dest(struct net *net, u32 onode,
840
840
le -> link = l ;
841
841
n -> link_cnt ++ ;
842
842
tipc_node_calculate_timer (n , l );
843
- if (n -> link_cnt == 1 )
844
- if (!mod_timer (& n -> timer , jiffies + n -> keepalive_intv ))
843
+ if (n -> link_cnt == 1 ) {
844
+ intv = jiffies + msecs_to_jiffies (n -> keepalive_intv );
845
+ if (!mod_timer (& n -> timer , intv ))
845
846
tipc_node_get (n );
847
+ }
846
848
}
847
849
memcpy (& le -> maddr , maddr , sizeof (* maddr ));
848
850
exit :
@@ -950,7 +952,7 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
950
952
state = SELF_UP_PEER_UP ;
951
953
break ;
952
954
case SELF_LOST_CONTACT_EVT :
953
- state = SELF_DOWN_PEER_LEAVING ;
955
+ state = SELF_DOWN_PEER_DOWN ;
954
956
break ;
955
957
case SELF_ESTABL_CONTACT_EVT :
956
958
case PEER_LOST_CONTACT_EVT :
@@ -969,7 +971,7 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
969
971
state = SELF_UP_PEER_UP ;
970
972
break ;
971
973
case PEER_LOST_CONTACT_EVT :
972
- state = SELF_LEAVING_PEER_DOWN ;
974
+ state = SELF_DOWN_PEER_DOWN ;
973
975
break ;
974
976
case SELF_LOST_CONTACT_EVT :
975
977
case PEER_ESTABL_CONTACT_EVT :
0 commit comments