Skip to content

Commit d7171cd

Browse files
committed
smb3: add dynamic trace points for socket connection
In debugging user problems with ip address/DNS issues with smb3 mounts, we sometimes needed additional info on the hostname and ip address. Add two tracepoints, one to show socket connection success and one for failures to connect to the socket. Sample output: mount.cifs-14551 [005] ..... 7636.547906: smb3_connect_done: conn_id=0x1 server=localhost addr=127.0.0.1:445 mount.cifs-14558 [004] ..... 7642.405413: smb3_connect_done: conn_id=0x2 server=smfrench.file.core.windows.net addr=52.239.158.232:445 mount.cifs-14741 [005] ..... 7818.490716: smb3_connect_done: conn_id=0x3 server=::1 addr=[::1]:445/0%0 mount.cifs-14810 [000] ..... 7966.380337: smb3_connect_err: rc=-101 conn_id=0x4 server=::2 addr=[::2]:445/0%0 mount.cifs-14810 [000] ..... 7966.380356: smb3_connect_err: rc=-101 conn_id=0x4 server=::2 addr=[::2]:139/0%0 mount.cifs-14818 [003] ..... 7986.771992: smb3_connect_done: conn_id=0x5 server=127.0.0.9 addr=127.0.0.9:445 mount.cifs-14825 [008] ..... 8008.178109: smb3_connect_err: rc=-115 conn_id=0x6 server=124.23.0.9 addr=124.23.0.9:445 mount.cifs-14825 [008] ..... 8013.298085: smb3_connect_err: rc=-115 conn_id=0x6 server=124.23.0.9 addr=124.23.0.9:139 cifsd-14553 [006] ..... 8036.735615: smb3_reconnect: conn_id=0x1 server=localhost current_mid=32 cifsd-14743 [010] ..... 8036.735644: smb3_reconnect: conn_id=0x3 server=::1 current_mid=29 cifsd-14743 [010] ..... 8039.921740: smb3_connect_err: rc=-111 conn_id=0x3 server=::1 addr=[::1]:445/0%0 cifsd-14553 [008] ..... 8042.993894: smb3_connect_err: rc=-111 conn_id=0x1 server=localhost addr=127.0.0.1:445 cifsd-14743 [010] ..... 8042.993894: smb3_connect_err: rc=-111 conn_id=0x3 server=::1 addr=[::1]:445/0%0 cifsd-14553 [008] ..... 8046.065824: smb3_connect_err: rc=-111 conn_id=0x1 server=localhost addr=127.0.0.1:445 cifsd-14743 [010] ..... 8046.065824: smb3_connect_err: rc=-111 conn_id=0x3 server=::1 addr=[::1]:445/0%0 cifsd-14553 [008] ..... 8049.137796: smb3_connect_done: conn_id=0x1 server=localhost addr=127.0.0.1:445 cifsd-14743 [010] ..... 8049.137796: smb3_connect_done: conn_id=0x3 server=::1 addr=[::1]:445/0%0 Reviewed-by: Paulo Alcantara (SUSE) <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent c462870 commit d7171cd

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

fs/cifs/connect.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2649,11 +2649,12 @@ generic_ip_connect(struct TCP_Server_Info *server)
26492649
rc = 0;
26502650
if (rc < 0) {
26512651
cifs_dbg(FYI, "Error %d connecting to server\n", rc);
2652+
trace_smb3_connect_err(server->hostname, server->conn_id, &server->dstaddr, rc);
26522653
sock_release(socket);
26532654
server->ssocket = NULL;
26542655
return rc;
26552656
}
2656-
2657+
trace_smb3_connect_done(server->hostname, server->conn_id, &server->dstaddr);
26572658
if (sport == htons(RFC1001_PORT))
26582659
rc = ip_rfc1001_connect(server);
26592660

fs/cifs/trace.h

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#define _CIFS_TRACE_H
1212

1313
#include <linux/tracepoint.h>
14+
#include <linux/net.h>
15+
#include <linux/inet.h>
1416

1517
/*
1618
* Please use this 3-part article as a reference for writing new tracepoints:
@@ -854,6 +856,75 @@ DEFINE_EVENT(smb3_lease_err_class, smb3_##name, \
854856

855857
DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
856858

859+
DECLARE_EVENT_CLASS(smb3_connect_class,
860+
TP_PROTO(char *hostname,
861+
__u64 conn_id,
862+
const struct __kernel_sockaddr_storage *dst_addr),
863+
TP_ARGS(hostname, conn_id, dst_addr),
864+
TP_STRUCT__entry(
865+
__string(hostname, hostname)
866+
__field(__u64, conn_id)
867+
__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
868+
),
869+
TP_fast_assign(
870+
struct sockaddr_storage *pss = NULL;
871+
872+
__entry->conn_id = conn_id;
873+
pss = (struct sockaddr_storage *)__entry->dst_addr;
874+
*pss = *dst_addr;
875+
__assign_str(hostname, hostname);
876+
),
877+
TP_printk("conn_id=0x%llx server=%s addr=%pISpsfc",
878+
__entry->conn_id,
879+
__get_str(hostname),
880+
__entry->dst_addr)
881+
)
882+
883+
#define DEFINE_SMB3_CONNECT_EVENT(name) \
884+
DEFINE_EVENT(smb3_connect_class, smb3_##name, \
885+
TP_PROTO(char *hostname, \
886+
__u64 conn_id, \
887+
const struct __kernel_sockaddr_storage *addr), \
888+
TP_ARGS(hostname, conn_id, addr))
889+
890+
DEFINE_SMB3_CONNECT_EVENT(connect_done);
891+
892+
DECLARE_EVENT_CLASS(smb3_connect_err_class,
893+
TP_PROTO(char *hostname, __u64 conn_id,
894+
const struct __kernel_sockaddr_storage *dst_addr, int rc),
895+
TP_ARGS(hostname, conn_id, dst_addr, rc),
896+
TP_STRUCT__entry(
897+
__string(hostname, hostname)
898+
__field(__u64, conn_id)
899+
__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
900+
__field(int, rc)
901+
),
902+
TP_fast_assign(
903+
struct sockaddr_storage *pss = NULL;
904+
905+
__entry->conn_id = conn_id;
906+
__entry->rc = rc;
907+
pss = (struct sockaddr_storage *)__entry->dst_addr;
908+
*pss = *dst_addr;
909+
__assign_str(hostname, hostname);
910+
),
911+
TP_printk("rc=%d conn_id=0x%llx server=%s addr=%pISpsfc",
912+
__entry->rc,
913+
__entry->conn_id,
914+
__get_str(hostname),
915+
__entry->dst_addr)
916+
)
917+
918+
#define DEFINE_SMB3_CONNECT_ERR_EVENT(name) \
919+
DEFINE_EVENT(smb3_connect_err_class, smb3_##name, \
920+
TP_PROTO(char *hostname, \
921+
__u64 conn_id, \
922+
const struct __kernel_sockaddr_storage *addr, \
923+
int rc), \
924+
TP_ARGS(hostname, conn_id, addr, rc))
925+
926+
DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
927+
857928
DECLARE_EVENT_CLASS(smb3_reconnect_class,
858929
TP_PROTO(__u64 currmid,
859930
__u64 conn_id,

0 commit comments

Comments
 (0)