Hi Hoang,

In general I feel that you should avoild using pr_debug when the
information belongs to per socket. For sockets use tracepoints (
https://lwn.net/Articles/379903/) or atleast the ratelimited variants.
See my comments below.

On Thu, Sep 27, 2018 at 11:04 AM Hoang Le <hoang.h...@dektech.com.au> wrote:

> It is useful when using dynamic debug (dyndbg) to turn on/off
> debug printouts.
> In this commit, we provide as much as possible debug information
> that we used to troubleshoot issues in our lab.
>
> Signed-off-by: Hoang Le <hoang.h...@dektech.com.au>
> ---
>  net/tipc/bearer.c |  3 +++
>  net/tipc/link.c   | 68 ++++++++++++++++++++++++++++++++++-------------
>  net/tipc/link.h   |  4 +++
>  net/tipc/node.c   | 14 ++++++++--
>  net/tipc/socket.c | 34 ++++++++++++++++++++++--
>  5 files changed, 100 insertions(+), 23 deletions(-)
>
> diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
> index 91891041e5e1..1ad49f14c129 100644
> --- a/net/tipc/bearer.c
> +++ b/net/tipc/bearer.c


[partha] To get the module name prefixed in the print, you add the line
below as the first line in the C file:
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt


> @@ -607,6 +607,9 @@ static int tipc_l2_device_event(struct notifier_block
> *nb, unsigned long evt,
>         if (!b)
>                 return NOTIFY_DONE;
>
> +       pr_debug("Bearer %s got event %lu from dev %s, status %lu,
> carrier:%d\n",
> +                b->name, evt, dev->name, b->up, netif_carrier_ok(dev));
> +
>         switch (evt) {
>         case NETDEV_CHANGE:
>                 if (netif_carrier_ok(dev))
> diff --git a/net/tipc/link.c b/net/tipc/link.c
> index b1f0bee54eac..25bed78816d0 100644
> --- a/net/tipc/link.c
> +++ b/net/tipc/link.c
> @@ -542,15 +542,16 @@ bool tipc_link_bc_create(struct net *net, u32
> ownnode, u32 peer,
>  int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>  {
>         int rc = 0;
> +       int state = l->state;

[partha] int old_state = l->state;

>
> -       switch (l->state) {
> +       switch (state) {
>         case LINK_RESETTING:
>                 switch (evt) {
>                 case LINK_PEER_RESET_EVT:
> -                       l->state = LINK_PEER_RESET;
> +                       state = LINK_PEER_RESET;
>                         break;
>                 case LINK_RESET_EVT:
> -                       l->state = LINK_RESET;
> +                       state = LINK_RESET;
>                         break;
>                 case LINK_FAILURE_EVT:
>                 case LINK_FAILOVER_BEGIN_EVT:
> @@ -565,10 +566,10 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         case LINK_RESET:
>                 switch (evt) {
>                 case LINK_PEER_RESET_EVT:
> -                       l->state = LINK_ESTABLISHING;
> +                       state = LINK_ESTABLISHING;
>                         break;
>                 case LINK_FAILOVER_BEGIN_EVT:
> -                       l->state = LINK_FAILINGOVER;
> +                       state = LINK_FAILINGOVER;
>                 case LINK_FAILURE_EVT:
>                 case LINK_RESET_EVT:
>                 case LINK_ESTABLISH_EVT:
> @@ -583,7 +584,7 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         case LINK_PEER_RESET:
>                 switch (evt) {
>                 case LINK_RESET_EVT:
> -                       l->state = LINK_ESTABLISHING;
> +                       state = LINK_ESTABLISHING;
>                         break;
>                 case LINK_PEER_RESET_EVT:
>                 case LINK_ESTABLISH_EVT:
> @@ -600,7 +601,7 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         case LINK_FAILINGOVER:
>                 switch (evt) {
>                 case LINK_FAILOVER_END_EVT:
> -                       l->state = LINK_RESET;
> +                       state = LINK_RESET;
>                         break;
>                 case LINK_PEER_RESET_EVT:
>                 case LINK_RESET_EVT:
> @@ -617,13 +618,13 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         case LINK_ESTABLISHING:
>                 switch (evt) {
>                 case LINK_ESTABLISH_EVT:
> -                       l->state = LINK_ESTABLISHED;
> +                       state = LINK_ESTABLISHED;
>                         break;
>                 case LINK_FAILOVER_BEGIN_EVT:
> -                       l->state = LINK_FAILINGOVER;
> +                       state = LINK_FAILINGOVER;
>                         break;
>                 case LINK_RESET_EVT:
> -                       l->state = LINK_RESET;
> +                       state = LINK_RESET;
>                         break;
>                 case LINK_FAILURE_EVT:
>                 case LINK_PEER_RESET_EVT:
> @@ -638,21 +639,21 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         case LINK_ESTABLISHED:
>                 switch (evt) {
>                 case LINK_PEER_RESET_EVT:
> -                       l->state = LINK_PEER_RESET;
> +                       state = LINK_PEER_RESET;
>                         rc |= TIPC_LINK_DOWN_EVT;
>                         break;
>                 case LINK_FAILURE_EVT:
> -                       l->state = LINK_RESETTING;
> +                       state = LINK_RESETTING;
>                         rc |= TIPC_LINK_DOWN_EVT;
>                         break;
>                 case LINK_RESET_EVT:
> -                       l->state = LINK_RESET;
> +                       state = LINK_RESET;
>                         break;
>                 case LINK_ESTABLISH_EVT:
>                 case LINK_SYNCH_END_EVT:
>                         break;
>                 case LINK_SYNCH_BEGIN_EVT:
> -                       l->state = LINK_SYNCHING;
> +                       state = LINK_SYNCHING;
>                         break;
>                 case LINK_FAILOVER_BEGIN_EVT:
>                 case LINK_FAILOVER_END_EVT:
> @@ -663,21 +664,21 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         case LINK_SYNCHING:
>                 switch (evt) {
>                 case LINK_PEER_RESET_EVT:
> -                       l->state = LINK_PEER_RESET;
> +                       state = LINK_PEER_RESET;
>                         rc |= TIPC_LINK_DOWN_EVT;
>                         break;
>                 case LINK_FAILURE_EVT:
> -                       l->state = LINK_RESETTING;
> +                       state = LINK_RESETTING;
>                         rc |= TIPC_LINK_DOWN_EVT;
>                         break;
>                 case LINK_RESET_EVT:
> -                       l->state = LINK_RESET;
> +                       state = LINK_RESET;
>                         break;
>                 case LINK_ESTABLISH_EVT:
>                 case LINK_SYNCH_BEGIN_EVT:
>                         break;
>                 case LINK_SYNCH_END_EVT:
> -                       l->state = LINK_ESTABLISHED;
> +                       state = LINK_ESTABLISHED;
>                         break;
>                 case LINK_FAILOVER_BEGIN_EVT:
>                 case LINK_FAILOVER_END_EVT:
> @@ -688,6 +689,9 @@ int tipc_link_fsm_evt(struct tipc_link *l, int evt)
>         default:
>                 pr_err("Unknown FSM state %x in %s\n", l->state, l->name);
>         }
> +       pr_debug("Link %s change state (0x%x)=>(0x%x), evt 0x%x\n",
> +                l->name, l->state, state, evt);
>
[partha] Your change for l->state and state seems unnecessary. Why don't
you store the old state and let l->state remain as it is like:
[partha] pr_debug("Link %s change state (0x%x)=>(0x%x), evt 0x%x\n",
l->name, old_state, l->state, evt);

> +       l->state = state;
>
        return rc;
>  illegal_evt:
>         pr_err("Illegal FSM event %x in state %x on link %s\n",
> @@ -1518,8 +1522,13 @@ static int tipc_link_proto_rcv(struct tipc_link *l,
> struct sk_buff *skb,
>         hdr = buf_msg(skb);
>         data = msg_data(hdr);
>
> -       if (!tipc_link_validate_msg(l, hdr))
> +       if (!tipc_link_validate_msg(l, hdr)) {
> +               pr_debug("Link %s reject msg seqno %d, usr %d, mtype,
> state %d, peer_session %u, session %u, rcv_nxt_state %u\n",
> +                        msg_seqno(hdr), msg_user(hdr), mtyp, l->state,
> +                        l->peer_session, msg_session(hdr),
> +                        l->rcv_nxt_state);
>                 goto exit;
> +       }
>
>         switch (mtyp) {
>         case RESET_MSG:
> @@ -2195,3 +2204,24 @@ void tipc_link_set_abort_limit(struct tipc_link *l,
> u32 limit)
>  {
>         l->abort_limit = limit;
>  }
> +
> +int tipc_link_state(struct tipc_link *l)
> +{
> +       return l->state;
> +}
> +
> +int tipc_link_peer_session(struct tipc_link *l)
> +{
> +       return l->peer_session;
> +}
> +
> +u16 tipc_link_rcv_next_state(struct tipc_link *l)
> +{
> +       return l->rcv_nxt_state;
> +}
> +
> +u16 tipc_link_snd_next_state(struct tipc_link *l)
> +{
> +       return l->snd_nxt_state;
> +}
> +
> diff --git a/net/tipc/link.h b/net/tipc/link.h
> index 7bc494a33fdf..e1d3a334eb7c 100644
> --- a/net/tipc/link.h
> +++ b/net/tipc/link.h
> @@ -144,4 +144,8 @@ int tipc_link_bc_sync_rcv(struct tipc_link *l,
>  struct tipc_msg *hdr,
>                           struct sk_buff_head *xmitq);
>  int tipc_link_bc_nack_rcv(struct tipc_link *l, struct sk_buff *skb,
>                           struct sk_buff_head *xmitq);
> +int tipc_link_state(struct tipc_link *l);
> +int tipc_link_peer_session(struct tipc_link *l);
> +u16 tipc_link_rcv_next_state(struct tipc_link *l);
> +u16 tipc_link_snd_next_state(struct tipc_link *l);
>  #endif
> diff --git a/net/tipc/node.c b/net/tipc/node.c
> index 68014f1b6976..69389c67f88a 100644
> --- a/net/tipc/node.c
> +++ b/net/tipc/node.c
> @@ -1222,6 +1222,8 @@ static void tipc_node_fsm_evt(struct tipc_node *n,
> int evt)
>                 pr_err("Unknown node fsm state %x\n", state);
>                 break;
>         }
> +       pr_debug("Node %x change state (0x%x)=>(0x%x), evt 0x%x\n",
> +                n->addr, n->state, state, evt);
>         n->state = state;
>         return;
>
> @@ -1567,8 +1569,12 @@ static bool tipc_node_check_state(struct tipc_node
> *n, struct sk_buff *skb,
>         l = n->links[bearer_id].link;
>         if (!l)
>                 return false;
> -       rcv_nxt = tipc_link_rcv_nxt(l);
>
> +       pr_debug("Node %x, nstate:0x%x, link:%s, lstate:0x%x, usr:%d,
> mtype: %d\n",
> +                n->addr, state, tipc_link_name(l), tipc_link_state(l),
> +                usr, mtyp);
> +
> +       rcv_nxt = tipc_link_rcv_nxt(l);
>
>         if (likely((state == SELF_UP_PEER_UP) && (usr != TUNNEL_PROTOCOL)))
>                 return true;
> @@ -1581,8 +1587,12 @@ static bool tipc_node_check_state(struct tipc_node
> *n, struct sk_buff *skb,
>                 }
>         }
>
> -       if (!tipc_link_validate_msg(l, hdr))
> +       if (!tipc_link_validate_msg(l, hdr)) {
> +               pr_debug("Reject msg seqno %d, lpeer_session %u, session
> %u, lrcv_nxt_state %u\n",
> +                        oseqno, tipc_link_peer_session(l),
> msg_session(hdr),
> +                        tipc_link_rcv_next_state(l));
>                 return false;
> +       }
>
>         /* Check and update node accesibility if applicable */
>         if (state == SELF_UP_PEER_COMING) {
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index 3f03ddd0e35b..468748a7f3dc 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -262,8 +262,13 @@ static void tsk_rej_rx_queue(struct sock *sk)
>  {
>         struct sk_buff *skb;
>
> -       while ((skb = __skb_dequeue(&sk->sk_receive_queue)))
> +       while ((skb = __skb_dequeue(&sk->sk_receive_queue))) {
> +               pr_debug("Reject msg seqno %d from node %x, port %u, err
> NO_PORT\n",
> +                        msg_seqno(buf_msg(skb)),
> +                        msg_prevnode(buf_msg(skb)),
> +                        msg_origport(buf_msg(skb)));
>                 tipc_sk_respond(sk, skb, TIPC_ERR_NO_PORT);
> +       }
>  }
>
>  static bool tipc_sk_connected(struct sock *sk)
> @@ -520,6 +525,9 @@ static void __tipc_shutdown(struct socket *sock, int
> error)
>                         tipc_set_sk_state(sk, TIPC_DISCONNECTING);
>                         tipc_node_remove_conn(net, dnode, tsk->portid);
>                 }
> +               pr_debug("Reject msg seqno %d from node %x, port %u, err
> %d\n",
> +                        msg_seqno(buf_msg(skb)),
> msg_prevnode(buf_msg(skb)),
> +                        msg_origport(buf_msg(skb)), error);
>                 tipc_sk_respond(sk, skb, error);
>         }
>
> @@ -1205,10 +1213,16 @@ static void tipc_sk_conn_proto_rcv(struct
> tipc_sock *tsk, struct sk_buff *skb,
>         bool conn_cong;
>
>         /* Ignore if connection cannot be validated: */
> -       if (!tsk_peer_msg(tsk, hdr))
> +       if (!tsk_peer_msg(tsk, hdr)) {
> +               pr_debug("Drop mtype %u from node %x, port %u\n", mtyp,
> +                        msg_prevnode(hdr), msg_origport(hdr));
>                 goto exit;
> +       }
>
>         if (unlikely(msg_errcode(hdr))) {
> +               pr_debug("Drop mtype %u from node %x, port %u, err %d\n",
> +                        mtyp, msg_prevnode(hdr), msg_origport(hdr),
> +                        msg_errcode(hdr));
>                 tipc_set_sk_state(sk, TIPC_DISCONNECTING);
>                 tipc_node_remove_conn(sock_net(sk), tsk_peer_node(tsk),
>                                       tsk_peer_port(tsk));
> @@ -1219,6 +1233,8 @@ static void tipc_sk_conn_proto_rcv(struct tipc_sock
> *tsk, struct sk_buff *skb,
>         tsk->probe_unacked = false;
>
>         if (mtyp == CONN_PROBE) {
> +               pr_debug("Reply PROBE seq %u to node %d, port %d\n",
> +                        msg_seqno(hdr), msg_prevnode(hdr),
> msg_origport(hdr));
>                 msg_set_type(hdr, CONN_PROBE_REPLY);
>                 if (tipc_msg_reverse(onode, &skb, TIPC_OK))
>                         __skb_queue_tail(xmitq, skb);
> @@ -1949,6 +1965,8 @@ static void tipc_sk_proto_rcv(struct sock *sk,
>                                       hdr, inputq, xmitq);
>                 break;
>         default:
> +               pr_debug("Drop msg, user %d from node %x, port %u\n",
> +                        msg_user(hdr), msg_prevnode(hdr),
> msg_origport(hdr));
>                 break;
>         }
>
> @@ -2127,6 +2145,9 @@ static void tipc_sk_filter_rcv(struct sock *sk,
> struct sk_buff *skb,
>                 }
>
>                 if (unlikely(err)) {
> +                       pr_debug("Reject msg from node %x, port %d, err
> %d\n",
> +                                msg_prevnode(buf_msg(skb)),
> +                                msg_origport(buf_msg(skb)), err);
>                         tipc_skb_reject(net, err, skb, xmitq);
>                         err = TIPC_OK;
>                         continue;
> @@ -2204,6 +2225,10 @@ static void tipc_sk_enqueue(struct sk_buff_head
> *inputq, struct sock *sk,
>                 /* Overload => reject message back to sender */
>                 onode = tipc_own_addr(sock_net(sk));
>                 atomic_inc(&sk->sk_drops);
> +               pr_debug("Reject msg seqno %d from node %d, port %u, err
> OVERLOAD\n",
> +                        msg_seqno(buf_msg(skb)),
> +                        msg_prevnode(buf_msg(skb)),
> +                        msg_origport(buf_msg(skb)));
>
Using pr_debug for message overflow per socket is dangerous. If at all this
is needed, you should use pr_debug_ratelimited().

>                 if (tipc_msg_reverse(onode, &skb, TIPC_ERR_OVERLOAD))
>                         __skb_queue_tail(xmitq, skb);
>                 break;
> @@ -2251,6 +2276,11 @@ void tipc_sk_rcv(struct net *net, struct
> sk_buff_head *inputq)
>                 if (tipc_msg_lookup_dest(net, skb, &err))
>                         goto xmit;
>
> +               pr_debug("Reject msg seqno %d from node %x, port %u, err
> NO_PORT\n",
> +                        msg_seqno(buf_msg(skb)),
> +                        msg_prevnode(buf_msg(skb)),
> +                        msg_origport(buf_msg(skb)));
> +
>                 /* Prepare for message rejection */
>                 if (!tipc_msg_reverse(tipc_own_addr(net), &skb, err))
>                         continue;
> --
> 2.17.1
>
>
>
> _______________________________________________
> tipc-discussion mailing list
> tipc-discussion@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/tipc-discussion
>

_______________________________________________
tipc-discussion mailing list
tipc-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to