]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
filelock: add a tracepoint to start of break_lease()
authorJeff Layton <jlayton@kernel.org>
Tue, 28 Apr 2026 07:09:47 +0000 (08:09 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 15 May 2026 17:24:32 +0000 (19:24 +0200)
...mostly to show the LEASE_BREAK_* flags.

Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Link: https://patch.msgid.link/20260428-dir-deleg-v3-3-5a0780ba9def@kernel.org
Acked-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/locks.c
include/trace/events/filelock.h

index 31086d6153e2712c3e8c66c56211967e3c3d680a..afa80fe6e9ffeb5b32d8dc793e9fec24c89e8deb 100644 (file)
@@ -1651,6 +1651,8 @@ int __break_lease(struct inode *inode, unsigned int flags)
        bool want_write = !(flags & LEASE_BREAK_OPEN_RDONLY);
        int error = 0;
 
+       trace_break_lease(inode, flags);
+
        type = break_lease_flags_to_type(flags);
        if (!type)
                return -EINVAL;
index 718b5c3f173705361a238a9e443fde3ee3646a80..f2bb6b7aa281e0bfa5333a10b31f852ec1a30e0f 100644 (file)
@@ -120,6 +120,39 @@ DEFINE_EVENT(filelock_lock, flock_lock_inode,
                TP_PROTO(struct inode *inode, struct file_lock *fl, int ret),
                TP_ARGS(inode, fl, ret));
 
+#define show_lease_break_flags(val)                                    \
+       __print_flags(val, "|",                                         \
+               { LEASE_BREAK_LEASE,            "LEASE" },              \
+               { LEASE_BREAK_DELEG,            "DELEG" },              \
+               { LEASE_BREAK_LAYOUT,           "LAYOUT" },             \
+               { LEASE_BREAK_NONBLOCK,         "NONBLOCK" },           \
+               { LEASE_BREAK_OPEN_RDONLY,      "OPEN_RDONLY" },        \
+               { LEASE_BREAK_DIR_CREATE,       "DIR_CREATE" },         \
+               { LEASE_BREAK_DIR_DELETE,       "DIR_DELETE" },         \
+               { LEASE_BREAK_DIR_RENAME,       "DIR_RENAME" })
+
+TRACE_EVENT(break_lease,
+       TP_PROTO(struct inode *inode, unsigned int flags),
+
+       TP_ARGS(inode, flags),
+
+       TP_STRUCT__entry(
+               __field(unsigned long, i_ino)
+               __field(dev_t, s_dev)
+               __field(unsigned int, flags)
+       ),
+
+       TP_fast_assign(
+               __entry->s_dev = inode->i_sb->s_dev;
+               __entry->i_ino = inode->i_ino;
+               __entry->flags = flags;
+       ),
+
+       TP_printk("dev=0x%x:0x%x ino=0x%lx flags=%s",
+                 MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
+                 __entry->i_ino, show_lease_break_flags(__entry->flags))
+);
+
 DECLARE_EVENT_CLASS(filelock_lease,
        TP_PROTO(struct inode *inode, struct file_lease *fl),