Commit d96a838a authored by Geliang Tang's avatar Geliang Tang Committed by David S. Miller
Browse files

mptcp: add tracepoint in subflow_check_data_avail



This patch added a tracepoint in subflow_check_data_avail() to show the
mapping status.

Suggested-by: default avatarPaolo Abeni <pabeni@redhat.com>
Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarGeliang Tang <geliangtang@gmail.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ed66bfb4
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -7,6 +7,14 @@

#include <linux/tracepoint.h>

#define show_mapping_status(status)					\
	__print_symbolic(status,					\
		{ 0, "MAPPING_OK" },					\
		{ 1, "MAPPING_INVALID" },				\
		{ 2, "MAPPING_EMPTY" },					\
		{ 3, "MAPPING_DATA_FIN" },				\
		{ 4, "MAPPING_DUMMY" })

TRACE_EVENT(mptcp_subflow_get_send,

	TP_PROTO(struct mptcp_subflow_context *subflow),
@@ -138,6 +146,27 @@ TRACE_EVENT(ack_update_msk,
		  __entry->msk_wnd_end)
);

TRACE_EVENT(subflow_check_data_avail,

	TP_PROTO(__u8 status, struct sk_buff *skb),

	TP_ARGS(status, skb),

	TP_STRUCT__entry(
		__field(u8, status)
		__field(const void *, skb)
	),

	TP_fast_assign(
		__entry->status = status;
		__entry->skb = skb;
	),

	TP_printk("mapping_status=%s, skb=%p",
		  show_mapping_status(__entry->status),
		  __entry->skb)
);

#endif /* _TRACE_MPTCP_H */

/* This part must be outside protection */
+1 −3
Original line number Diff line number Diff line
@@ -1002,8 +1002,6 @@ static bool subflow_check_data_avail(struct sock *ssk)
	struct mptcp_sock *msk;
	struct sk_buff *skb;

	pr_debug("msk=%p ssk=%p data_avail=%d skb=%p", subflow->conn, ssk,
		 subflow->data_avail, skb_peek(&ssk->sk_receive_queue));
	if (!skb_peek(&ssk->sk_receive_queue))
		subflow->data_avail = 0;
	if (subflow->data_avail)
@@ -1015,7 +1013,7 @@ static bool subflow_check_data_avail(struct sock *ssk)
		u64 old_ack;

		status = get_mapping_status(ssk, msk);
		pr_debug("msk=%p ssk=%p status=%d", msk, ssk, status);
		trace_subflow_check_data_avail(status, skb_peek(&ssk->sk_receive_queue));
		if (status == MAPPING_INVALID) {
			ssk->sk_err = EBADMSG;
			goto fatal;