]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: tracepoints: add trace event for log_new_dir_dentries()
authorFilipe Manana <fdmanana@suse.com>
Tue, 5 May 2026 14:59:37 +0000 (15:59 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 8 Jun 2026 13:53:35 +0000 (15:53 +0200)
log_new_dir_dentries() is an important step called during a fsync, as
well as during rename and link operations on inodes that were previously
logged. Add trace events for when entering and exiting that function.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/tree-log.c
include/trace/events/btrfs.h

index f34dc9771dab91a434d3413cfbfd3573e854b098..44c7d250b810284e3b145801201099d76a8a16cf 100644 (file)
@@ -5902,9 +5902,13 @@ static int log_new_dir_dentries(struct btrfs_trans_handle *trans,
        struct btrfs_inode *curr_inode = start_inode;
        int ret = 0;
 
+       trace_btrfs_log_new_dir_dentries_enter(trans, start_inode);
+
        path = btrfs_alloc_path();
-       if (!path)
-               return -ENOMEM;
+       if (!path) {
+               ret = -ENOMEM;
+               goto out;
+       }
 
        /* Pairs with btrfs_add_delayed_iput below. */
        ihold(&curr_inode->vfs_inode);
@@ -6023,6 +6027,8 @@ out:
                        kfree(dir_elem);
        }
 
+       trace_btrfs_log_new_dir_dentries_exit(trans, start_inode, ret);
+
        return ret;
 }
 
index d16de652a815a19e8eb744475d762f495241d397..c13c1ce0b344ca5a32ac9ea83cca4fbba958e12d 100644 (file)
@@ -1175,6 +1175,59 @@ TRACE_EVENT(btrfs_log_all_new_ancestors_exit,
                        __entry->transid, __entry->ret)
 );
 
+TRACE_EVENT(btrfs_log_new_dir_dentries_enter,
+
+       TP_PROTO(const struct btrfs_trans_handle *trans,
+                const struct btrfs_inode *inode),
+
+       TP_ARGS(trans, inode),
+
+       TP_STRUCT__entry_btrfs(
+               __field(        u64,            root_objectid           )
+               __field(        u64,            ino                     )
+               __field(        u64,            transid                 )
+       ),
+
+       TP_fast_assign(
+               TP_fast_assign_fsid(inode->root->fs_info);
+               __entry->root_objectid          = btrfs_root_id(inode->root);
+               __entry->ino                    = btrfs_ino(inode);
+               __entry->transid                = trans->transid;
+       ),
+
+       TP_printk_btrfs("root=%llu(%s) ino=%llu transid=%llu",
+                       show_root_type(__entry->root_objectid), __entry->ino,
+                       __entry->transid)
+);
+
+TRACE_EVENT(btrfs_log_new_dir_dentries_exit,
+
+       TP_PROTO(const struct btrfs_trans_handle *trans,
+                const struct btrfs_inode *inode,
+                int ret),
+
+       TP_ARGS(trans, inode, ret),
+
+       TP_STRUCT__entry_btrfs(
+               __field(        u64,            root_objectid           )
+               __field(        u64,            ino                     )
+               __field(        u64,            transid                 )
+               __field(        int,            ret                     )
+       ),
+
+       TP_fast_assign(
+               TP_fast_assign_fsid(inode->root->fs_info);
+               __entry->root_objectid          = btrfs_root_id(inode->root);
+               __entry->ino                    = btrfs_ino(inode);
+               __entry->transid                = trans->transid;
+               __entry->ret                    = ret;
+       ),
+
+       TP_printk_btrfs("root=%llu(%s) ino=%llu transid=%llu ret=%d",
+                       show_root_type(__entry->root_objectid), __entry->ino,
+                       __entry->transid, __entry->ret)
+);
+
 TRACE_EVENT(btrfs_sync_fs,
 
        TP_PROTO(const struct btrfs_fs_info *fs_info, int wait),