Merge branch 'tipc-small-fixes'
Jon Maloy says: ==================== tipc: two small fixes We fix a couple of rarely seen anomalies discovered during testing. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6278e03dc6
|
@ -87,7 +87,6 @@ struct tipc_stats {
|
||||||
* @peer_bearer_id: bearer id used by link's peer endpoint
|
* @peer_bearer_id: bearer id used by link's peer endpoint
|
||||||
* @bearer_id: local bearer id used by link
|
* @bearer_id: local bearer id used by link
|
||||||
* @tolerance: minimum link continuity loss needed to reset link [in ms]
|
* @tolerance: minimum link continuity loss needed to reset link [in ms]
|
||||||
* @keepalive_intv: link keepalive timer interval
|
|
||||||
* @abort_limit: # of unacknowledged continuity probes needed to reset link
|
* @abort_limit: # of unacknowledged continuity probes needed to reset link
|
||||||
* @state: current state of link FSM
|
* @state: current state of link FSM
|
||||||
* @peer_caps: bitmap describing capabilities of peer node
|
* @peer_caps: bitmap describing capabilities of peer node
|
||||||
|
@ -131,7 +130,6 @@ struct tipc_link {
|
||||||
u32 peer_bearer_id;
|
u32 peer_bearer_id;
|
||||||
u32 bearer_id;
|
u32 bearer_id;
|
||||||
u32 tolerance;
|
u32 tolerance;
|
||||||
unsigned long keepalive_intv;
|
|
||||||
u32 abort_limit;
|
u32 abort_limit;
|
||||||
u32 state;
|
u32 state;
|
||||||
u16 peer_caps;
|
u16 peer_caps;
|
||||||
|
|
|
@ -378,14 +378,13 @@ static void tipc_node_calculate_timer(struct tipc_node *n, struct tipc_link *l)
|
||||||
{
|
{
|
||||||
unsigned long tol = tipc_link_tolerance(l);
|
unsigned long tol = tipc_link_tolerance(l);
|
||||||
unsigned long intv = ((tol / 4) > 500) ? 500 : tol / 4;
|
unsigned long intv = ((tol / 4) > 500) ? 500 : tol / 4;
|
||||||
unsigned long keepalive_intv = msecs_to_jiffies(intv);
|
|
||||||
|
|
||||||
/* Link with lowest tolerance determines timer interval */
|
/* Link with lowest tolerance determines timer interval */
|
||||||
if (keepalive_intv < n->keepalive_intv)
|
if (intv < n->keepalive_intv)
|
||||||
n->keepalive_intv = keepalive_intv;
|
n->keepalive_intv = intv;
|
||||||
|
|
||||||
/* Ensure link's abort limit corresponds to current interval */
|
/* Ensure link's abort limit corresponds to current tolerance */
|
||||||
tipc_link_set_abort_limit(l, tol / jiffies_to_msecs(n->keepalive_intv));
|
tipc_link_set_abort_limit(l, tol / n->keepalive_intv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tipc_node_delete(struct tipc_node *node)
|
static void tipc_node_delete(struct tipc_node *node)
|
||||||
|
@ -526,7 +525,7 @@ static void tipc_node_timeout(unsigned long data)
|
||||||
if (rc & TIPC_LINK_DOWN_EVT)
|
if (rc & TIPC_LINK_DOWN_EVT)
|
||||||
tipc_node_link_down(n, bearer_id, false);
|
tipc_node_link_down(n, bearer_id, false);
|
||||||
}
|
}
|
||||||
mod_timer(&n->timer, jiffies + n->keepalive_intv);
|
mod_timer(&n->timer, jiffies + msecs_to_jiffies(n->keepalive_intv));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -735,6 +734,7 @@ void tipc_node_check_dest(struct net *net, u32 onode,
|
||||||
bool accept_addr = false;
|
bool accept_addr = false;
|
||||||
bool reset = true;
|
bool reset = true;
|
||||||
char *if_name;
|
char *if_name;
|
||||||
|
unsigned long intv;
|
||||||
|
|
||||||
*dupl_addr = false;
|
*dupl_addr = false;
|
||||||
*respond = false;
|
*respond = false;
|
||||||
|
@ -840,9 +840,11 @@ void tipc_node_check_dest(struct net *net, u32 onode,
|
||||||
le->link = l;
|
le->link = l;
|
||||||
n->link_cnt++;
|
n->link_cnt++;
|
||||||
tipc_node_calculate_timer(n, l);
|
tipc_node_calculate_timer(n, l);
|
||||||
if (n->link_cnt == 1)
|
if (n->link_cnt == 1) {
|
||||||
if (!mod_timer(&n->timer, jiffies + n->keepalive_intv))
|
intv = jiffies + msecs_to_jiffies(n->keepalive_intv);
|
||||||
|
if (!mod_timer(&n->timer, intv))
|
||||||
tipc_node_get(n);
|
tipc_node_get(n);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
memcpy(&le->maddr, maddr, sizeof(*maddr));
|
memcpy(&le->maddr, maddr, sizeof(*maddr));
|
||||||
exit:
|
exit:
|
||||||
|
@ -950,7 +952,7 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
|
||||||
state = SELF_UP_PEER_UP;
|
state = SELF_UP_PEER_UP;
|
||||||
break;
|
break;
|
||||||
case SELF_LOST_CONTACT_EVT:
|
case SELF_LOST_CONTACT_EVT:
|
||||||
state = SELF_DOWN_PEER_LEAVING;
|
state = SELF_DOWN_PEER_DOWN;
|
||||||
break;
|
break;
|
||||||
case SELF_ESTABL_CONTACT_EVT:
|
case SELF_ESTABL_CONTACT_EVT:
|
||||||
case PEER_LOST_CONTACT_EVT:
|
case PEER_LOST_CONTACT_EVT:
|
||||||
|
@ -969,7 +971,7 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
|
||||||
state = SELF_UP_PEER_UP;
|
state = SELF_UP_PEER_UP;
|
||||||
break;
|
break;
|
||||||
case PEER_LOST_CONTACT_EVT:
|
case PEER_LOST_CONTACT_EVT:
|
||||||
state = SELF_LEAVING_PEER_DOWN;
|
state = SELF_DOWN_PEER_DOWN;
|
||||||
break;
|
break;
|
||||||
case SELF_LOST_CONTACT_EVT:
|
case SELF_LOST_CONTACT_EVT:
|
||||||
case PEER_ESTABL_CONTACT_EVT:
|
case PEER_ESTABL_CONTACT_EVT:
|
||||||
|
|
Loading…
Reference in New Issue