Commit eb18a510 authored by Tuong Lien's avatar Tuong Lien Committed by David S. Miller

tipc: add trace_events for tipc node

The commit adds the new trace_events for TIPC node object:

trace_tipc_node_create()
trace_tipc_node_delete()
trace_tipc_node_lost_contact()
trace_tipc_node_timeout()
trace_tipc_node_link_up()
trace_tipc_node_link_down()
trace_tipc_node_reset_links()
trace_tipc_node_fsm_evt()
trace_tipc_node_check_state()

Also, enables the traces for the following cases:
- When a node is created/deleted;
- When a node contact is lost;
- When a node timer is timed out;
- When a node link is up/down;
- When all node links are reset;
- When node state is changed;
- When a skb comes and node state needs to be checked/updated.
Acked-by: default avatarYing Xue <ying.xue@windriver.com>
Tested-by: default avatarYing Xue <ying.xue@windriver.com>
Acked-by: default avatarJon Maloy <jon.maloy@ericsson.com>
Signed-off-by: default avatarTuong Lien <tuong.t.lien@dektech.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 01e661eb
...@@ -433,6 +433,7 @@ static struct tipc_node *tipc_node_create(struct net *net, u32 addr, ...@@ -433,6 +433,7 @@ static struct tipc_node *tipc_node_create(struct net *net, u32 addr,
break; break;
} }
list_add_tail_rcu(&n->list, &temp_node->list); list_add_tail_rcu(&n->list, &temp_node->list);
trace_tipc_node_create(n, true, " ");
exit: exit:
spin_unlock_bh(&tn->node_list_lock); spin_unlock_bh(&tn->node_list_lock);
return n; return n;
...@@ -460,6 +461,7 @@ static void tipc_node_delete_from_list(struct tipc_node *node) ...@@ -460,6 +461,7 @@ static void tipc_node_delete_from_list(struct tipc_node *node)
static void tipc_node_delete(struct tipc_node *node) static void tipc_node_delete(struct tipc_node *node)
{ {
trace_tipc_node_delete(node, true, " ");
tipc_node_delete_from_list(node); tipc_node_delete_from_list(node);
del_timer_sync(&node->timer); del_timer_sync(&node->timer);
...@@ -617,6 +619,7 @@ static void tipc_node_timeout(struct timer_list *t) ...@@ -617,6 +619,7 @@ static void tipc_node_timeout(struct timer_list *t)
int bearer_id; int bearer_id;
int rc = 0; int rc = 0;
trace_tipc_node_timeout(n, false, " ");
if (!node_is_up(n) && tipc_node_cleanup(n)) { if (!node_is_up(n) && tipc_node_cleanup(n)) {
/*Removing the reference of Timer*/ /*Removing the reference of Timer*/
tipc_node_put(n); tipc_node_put(n);
...@@ -682,6 +685,7 @@ static void __tipc_node_link_up(struct tipc_node *n, int bearer_id, ...@@ -682,6 +685,7 @@ static void __tipc_node_link_up(struct tipc_node *n, int bearer_id,
pr_debug("Established link <%s> on network plane %c\n", pr_debug("Established link <%s> on network plane %c\n",
tipc_link_name(nl), tipc_link_plane(nl)); tipc_link_name(nl), tipc_link_plane(nl));
trace_tipc_node_link_up(n, true, " ");
/* Ensure that a STATE message goes first */ /* Ensure that a STATE message goes first */
tipc_link_build_state_msg(nl, xmitq); tipc_link_build_state_msg(nl, xmitq);
...@@ -835,6 +839,7 @@ static void tipc_node_link_down(struct tipc_node *n, int bearer_id, bool delete) ...@@ -835,6 +839,7 @@ static void tipc_node_link_down(struct tipc_node *n, int bearer_id, bool delete)
/* Defuse pending tipc_node_link_up() */ /* Defuse pending tipc_node_link_up() */
tipc_link_fsm_evt(l, LINK_RESET_EVT); tipc_link_fsm_evt(l, LINK_RESET_EVT);
} }
trace_tipc_node_link_down(n, true, "node link down or deleted!");
tipc_node_write_unlock(n); tipc_node_write_unlock(n);
if (delete) if (delete)
tipc_mon_remove_peer(n->net, n->addr, old_bearer_id); tipc_mon_remove_peer(n->net, n->addr, old_bearer_id);
...@@ -1064,6 +1069,7 @@ static void tipc_node_reset_links(struct tipc_node *n) ...@@ -1064,6 +1069,7 @@ static void tipc_node_reset_links(struct tipc_node *n)
pr_warn("Resetting all links to %x\n", n->addr); pr_warn("Resetting all links to %x\n", n->addr);
trace_tipc_node_reset_links(n, true, " ");
for (i = 0; i < MAX_BEARERS; i++) { for (i = 0; i < MAX_BEARERS; i++) {
tipc_node_link_down(n, i, false); tipc_node_link_down(n, i, false);
} }
...@@ -1239,11 +1245,13 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt) ...@@ -1239,11 +1245,13 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int evt)
pr_err("Unknown node fsm state %x\n", state); pr_err("Unknown node fsm state %x\n", state);
break; break;
} }
trace_tipc_node_fsm(n->peer_id, n->state, state, evt);
n->state = state; n->state = state;
return; return;
illegal_evt: illegal_evt:
pr_err("Illegal node fsm evt %x in state %x\n", evt, state); pr_err("Illegal node fsm evt %x in state %x\n", evt, state);
trace_tipc_node_fsm(n->peer_id, n->state, state, evt);
} }
static void node_lost_contact(struct tipc_node *n, static void node_lost_contact(struct tipc_node *n,
...@@ -1257,6 +1265,7 @@ static void node_lost_contact(struct tipc_node *n, ...@@ -1257,6 +1265,7 @@ static void node_lost_contact(struct tipc_node *n,
pr_debug("Lost contact with %x\n", n->addr); pr_debug("Lost contact with %x\n", n->addr);
n->delete_at = jiffies + msecs_to_jiffies(NODE_CLEANUP_AFTER); n->delete_at = jiffies + msecs_to_jiffies(NODE_CLEANUP_AFTER);
trace_tipc_node_lost_contact(n, true, " ");
/* Clean up broadcast state */ /* Clean up broadcast state */
tipc_bcast_remove_peer(n->net, n->bc_entry.link); tipc_bcast_remove_peer(n->net, n->bc_entry.link);
...@@ -1585,6 +1594,10 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb, ...@@ -1585,6 +1594,10 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb,
struct tipc_media_addr *maddr; struct tipc_media_addr *maddr;
int pb_id; int pb_id;
if (trace_tipc_node_check_state_enabled()) {
trace_tipc_skb_dump(skb, false, "skb for node state check");
trace_tipc_node_check_state(n, true, " ");
}
l = n->links[bearer_id].link; l = n->links[bearer_id].link;
if (!l) if (!l)
return false; return false;
...@@ -1636,6 +1649,8 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb, ...@@ -1636,6 +1649,8 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb,
syncpt = oseqno + exp_pkts - 1; syncpt = oseqno + exp_pkts - 1;
if (pl && tipc_link_is_up(pl)) { if (pl && tipc_link_is_up(pl)) {
__tipc_node_link_down(n, &pb_id, xmitq, &maddr); __tipc_node_link_down(n, &pb_id, xmitq, &maddr);
trace_tipc_node_link_down(n, true,
"node link down <- failover!");
tipc_skb_queue_splice_tail_init(tipc_link_inputq(pl), tipc_skb_queue_splice_tail_init(tipc_link_inputq(pl),
tipc_link_inputq(l)); tipc_link_inputq(l));
} }
......
...@@ -337,6 +337,14 @@ DEFINE_EVENT(tipc_node_class, name, \ ...@@ -337,6 +337,14 @@ DEFINE_EVENT(tipc_node_class, name, \
TP_PROTO(struct tipc_node *n, bool more, const char *header), \ TP_PROTO(struct tipc_node *n, bool more, const char *header), \
TP_ARGS(n, more, header)) TP_ARGS(n, more, header))
DEFINE_NODE_EVENT(tipc_node_dump); DEFINE_NODE_EVENT(tipc_node_dump);
DEFINE_NODE_EVENT(tipc_node_create);
DEFINE_NODE_EVENT(tipc_node_delete);
DEFINE_NODE_EVENT(tipc_node_lost_contact);
DEFINE_NODE_EVENT(tipc_node_timeout);
DEFINE_NODE_EVENT(tipc_node_link_up);
DEFINE_NODE_EVENT(tipc_node_link_down);
DEFINE_NODE_EVENT(tipc_node_reset_links);
DEFINE_NODE_EVENT(tipc_node_check_state);
DECLARE_EVENT_CLASS(tipc_fsm_class, DECLARE_EVENT_CLASS(tipc_fsm_class,
...@@ -368,6 +376,7 @@ DEFINE_EVENT(tipc_fsm_class, fsm_name, \ ...@@ -368,6 +376,7 @@ DEFINE_EVENT(tipc_fsm_class, fsm_name, \
TP_PROTO(const char *name, u32 os, u32 ns, int evt), \ TP_PROTO(const char *name, u32 os, u32 ns, int evt), \
TP_ARGS(name, os, ns, evt)) TP_ARGS(name, os, ns, evt))
DEFINE_FSM_EVENT(tipc_link_fsm); DEFINE_FSM_EVENT(tipc_link_fsm);
DEFINE_FSM_EVENT(tipc_node_fsm);
#endif /* _TIPC_TRACE_H */ #endif /* _TIPC_TRACE_H */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment