]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
smb: client: add new tracepoint to trace lease break notification
authorBharath SM <bharathsm@microsoft.com>
Tue, 2 Sep 2025 14:40:25 +0000 (20:10 +0530)
committerSteve French <stfrench@microsoft.com>
Wed, 3 Sep 2025 01:37:44 +0000 (20:37 -0500)
Add smb3_lease_break_enter to trace lease break notifications,
recording lease state, flags, epoch, and lease key. Align
smb3_lease_not_found to use the same payload and print format.

Signed-off-by: Bharath SM <bharathsm@microsoft.com>
Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smb2misc.c
fs/smb/client/smb2pdu.c
fs/smb/client/trace.h

index cddf273c14aed70d60e2c10d7d4bdc541260bcff..89d933b4a8bc286e8ae7c394f0241b74349c9605 100644 (file)
@@ -614,6 +614,15 @@ smb2_is_valid_lease_break(char *buffer, struct TCP_Server_Info *server)
        struct cifs_tcon *tcon;
        struct cifs_pending_open *open;
 
+       /* Trace receipt of lease break request from server */
+       trace_smb3_lease_break_enter(le32_to_cpu(rsp->CurrentLeaseState),
+               le32_to_cpu(rsp->Flags),
+               le16_to_cpu(rsp->Epoch),
+               le32_to_cpu(rsp->hdr.Id.SyncId.TreeId),
+               le64_to_cpu(rsp->hdr.SessionId),
+               *((u64 *)rsp->LeaseKey),
+               *((u64 *)&rsp->LeaseKey[8]));
+
        cifs_dbg(FYI, "Checking for lease break\n");
 
        /* If server is a channel, select the primary channel */
@@ -660,10 +669,12 @@ smb2_is_valid_lease_break(char *buffer, struct TCP_Server_Info *server)
        spin_unlock(&cifs_tcp_ses_lock);
        cifs_dbg(FYI, "Can not process lease break - no lease matched\n");
        trace_smb3_lease_not_found(le32_to_cpu(rsp->CurrentLeaseState),
-                                  le32_to_cpu(rsp->hdr.Id.SyncId.TreeId),
-                                  le64_to_cpu(rsp->hdr.SessionId),
-                                  *((u64 *)rsp->LeaseKey),
-                                  *((u64 *)&rsp->LeaseKey[8]));
+                                          le32_to_cpu(rsp->Flags),
+                                          le16_to_cpu(rsp->Epoch),
+                                          le32_to_cpu(rsp->hdr.Id.SyncId.TreeId),
+                                          le64_to_cpu(rsp->hdr.SessionId),
+                                          *((u64 *)rsp->LeaseKey),
+                                          *((u64 *)&rsp->LeaseKey[8]));
 
        return false;
 }
index 2df93a75e3b8f3f806ee0a5b938c5f15606f3cc6..c3b9d3f6210ff9c74972abb0662d8e870a1caebc 100644 (file)
@@ -6192,11 +6192,11 @@ SMB2_lease_break(const unsigned int xid, struct cifs_tcon *tcon,
        please_key_high = (__u64 *)(lease_key+8);
        if (rc) {
                cifs_stats_fail_inc(tcon, SMB2_OPLOCK_BREAK_HE);
-               trace_smb3_lease_err(le32_to_cpu(lease_state), tcon->tid,
+               trace_smb3_lease_ack_err(le32_to_cpu(lease_state), tcon->tid,
                        ses->Suid, *please_key_low, *please_key_high, rc);
                cifs_dbg(FYI, "Send error in Lease Break = %d\n", rc);
        } else
-               trace_smb3_lease_done(le32_to_cpu(lease_state), tcon->tid,
+               trace_smb3_lease_ack_done(le32_to_cpu(lease_state), tcon->tid,
                        ses->Suid, *please_key_low, *please_key_high);
 
        return rc;
index 93e5b2bb9f28a23afa44f7f452e1a63a77ad1e12..fe0e075bc63c3c947136dcb4b886e8535bc2130b 100644 (file)
@@ -1171,8 +1171,54 @@ DEFINE_EVENT(smb3_lease_done_class, smb3_##name,  \
                __u64   lease_key_high),        \
        TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
 
-DEFINE_SMB3_LEASE_DONE_EVENT(lease_done);
-DEFINE_SMB3_LEASE_DONE_EVENT(lease_not_found);
+DEFINE_SMB3_LEASE_DONE_EVENT(lease_ack_done);
+/* Tracepoint when a lease break request is received/entered (includes epoch and flags) */
+DECLARE_EVENT_CLASS(smb3_lease_enter_class,
+       TP_PROTO(__u32 lease_state,
+               __u32 flags,
+               __u16 epoch,
+               __u32 tid,
+               __u64 sesid,
+               __u64 lease_key_low,
+               __u64 lease_key_high),
+       TP_ARGS(lease_state, flags, epoch, tid, sesid, lease_key_low, lease_key_high),
+       TP_STRUCT__entry(
+               __field(__u32, lease_state)
+               __field(__u32, flags)
+               __field(__u16, epoch)
+               __field(__u32, tid)
+               __field(__u64, sesid)
+               __field(__u64, lease_key_low)
+               __field(__u64, lease_key_high)
+       ),
+       TP_fast_assign(
+               __entry->lease_state = lease_state;
+               __entry->flags = flags;
+               __entry->epoch = epoch;
+               __entry->tid = tid;
+               __entry->sesid = sesid;
+               __entry->lease_key_low = lease_key_low;
+               __entry->lease_key_high = lease_key_high;
+       ),
+       TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x flags=0x%x epoch=%u",
+               __entry->sesid, __entry->tid, __entry->lease_key_high,
+               __entry->lease_key_low, __entry->lease_state, __entry->flags, __entry->epoch)
+)
+
+#define DEFINE_SMB3_LEASE_ENTER_EVENT(name)        \
+DEFINE_EVENT(smb3_lease_enter_class, smb3_##name,  \
+       TP_PROTO(__u32 lease_state,            \
+               __u32 flags,               \
+               __u16 epoch,               \
+               __u32 tid,                 \
+               __u64 sesid,               \
+               __u64 lease_key_low,       \
+               __u64 lease_key_high),     \
+       TP_ARGS(lease_state, flags, epoch, tid, sesid, lease_key_low, lease_key_high))
+
+DEFINE_SMB3_LEASE_ENTER_EVENT(lease_break_enter);
+/* Lease not found: reuse lease_enter payload (includes epoch and flags) */
+DEFINE_SMB3_LEASE_ENTER_EVENT(lease_not_found);
 
 DECLARE_EVENT_CLASS(smb3_lease_err_class,
        TP_PROTO(__u32  lease_state,
@@ -1213,7 +1259,7 @@ DEFINE_EVENT(smb3_lease_err_class, smb3_##name,  \
                int     rc),                    \
        TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
 
-DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
+DEFINE_SMB3_LEASE_ERR_EVENT(lease_ack_err);
 
 DECLARE_EVENT_CLASS(smb3_connect_class,
        TP_PROTO(char *hostname,