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: Paolo Abeni <pabeni@redhat.com> Acked-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Geliang Tang <geliangtang@gmail.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
ed66bfb4ce
Коммит
d96a838a7c
|
@ -7,6 +7,14 @@
|
||||||
|
|
||||||
#include <linux/tracepoint.h>
|
#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,
|
TRACE_EVENT(mptcp_subflow_get_send,
|
||||||
|
|
||||||
TP_PROTO(struct mptcp_subflow_context *subflow),
|
TP_PROTO(struct mptcp_subflow_context *subflow),
|
||||||
|
@ -138,6 +146,27 @@ TRACE_EVENT(ack_update_msk,
|
||||||
__entry->msk_wnd_end)
|
__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 */
|
#endif /* _TRACE_MPTCP_H */
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|
|
@ -1002,8 +1002,6 @@ static bool subflow_check_data_avail(struct sock *ssk)
|
||||||
struct mptcp_sock *msk;
|
struct mptcp_sock *msk;
|
||||||
struct sk_buff *skb;
|
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))
|
if (!skb_peek(&ssk->sk_receive_queue))
|
||||||
subflow->data_avail = 0;
|
subflow->data_avail = 0;
|
||||||
if (subflow->data_avail)
|
if (subflow->data_avail)
|
||||||
|
@ -1015,7 +1013,7 @@ static bool subflow_check_data_avail(struct sock *ssk)
|
||||||
u64 old_ack;
|
u64 old_ack;
|
||||||
|
|
||||||
status = get_mapping_status(ssk, msk);
|
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) {
|
if (status == MAPPING_INVALID) {
|
||||||
ssk->sk_err = EBADMSG;
|
ssk->sk_err = EBADMSG;
|
||||||
goto fatal;
|
goto fatal;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче