diff options
Diffstat (limited to 'fs/xfs/scrub/trace.h')
-rw-r--r-- | fs/xfs/scrub/trace.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/fs/xfs/scrub/trace.h b/fs/xfs/scrub/trace.h index 88fc199493b0..2572adbd3921 100644 --- a/fs/xfs/scrub/trace.h +++ b/fs/xfs/scrub/trace.h @@ -1104,6 +1104,100 @@ TRACE_EVENT(xrep_xattr_insert_rec, __entry->valuelen) ); +TRACE_EVENT(xrep_dir_recover_dirblock, + TP_PROTO(struct xfs_inode *dp, xfs_dablk_t dabno, uint32_t magic, + uint32_t magic_guess), + TP_ARGS(dp, dabno, magic, magic_guess), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, dir_ino) + __field(xfs_dablk_t, dabno) + __field(uint32_t, magic) + __field(uint32_t, magic_guess) + ), + TP_fast_assign( + __entry->dev = dp->i_mount->m_super->s_dev; + __entry->dir_ino = dp->i_ino; + __entry->dabno = dabno; + __entry->magic = magic; + __entry->magic_guess = magic_guess; + ), + TP_printk("dev %d:%d dir 0x%llx dablk %u magic 0x%x magic_guess 0x%x", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->dir_ino, + __entry->dabno, + __entry->magic, + __entry->magic_guess) +); + +TRACE_EVENT(xrep_dir_salvage_entry, + TP_PROTO(struct xfs_inode *dp, char *name, unsigned int namelen, + xfs_ino_t ino), + TP_ARGS(dp, name, namelen, ino), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, dir_ino) + __field(unsigned int, namelen) + __dynamic_array(char, name, namelen + 1) + __field(xfs_ino_t, ino) + ), + TP_fast_assign( + __entry->dev = dp->i_mount->m_super->s_dev; + __entry->dir_ino = dp->i_ino; + __entry->namelen = namelen; + memcpy(__get_str(name), name, namelen); + __get_str(name)[namelen] = 0; + __entry->ino = ino; + ), + TP_printk("dev %d:%d dir 0x%llx name '%.*s' ino 0x%llx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->dir_ino, + __entry->namelen, + __get_str(name), + __entry->ino) +); + +#define XFS_DIR3_FTYPE_STR \ + { XFS_DIR3_FT_UNKNOWN, "unknown" }, \ + { XFS_DIR3_FT_REG_FILE, "file" }, \ + { XFS_DIR3_FT_DIR, "directory" }, \ + { XFS_DIR3_FT_CHRDEV, "char" }, \ + { XFS_DIR3_FT_BLKDEV, "block" }, \ + { XFS_DIR3_FT_FIFO, "fifo" }, \ + { XFS_DIR3_FT_SOCK, "sock" }, \ + { XFS_DIR3_FT_SYMLINK, "symlink" }, \ + { XFS_DIR3_FT_WHT, "whiteout" } + +TRACE_EVENT(xrep_dir_insert_rec, + TP_PROTO(struct xfs_inode *dp, char *name, unsigned int namelen, + xfs_ino_t ino, uint8_t ftype), + TP_ARGS(dp, name, namelen, ino, ftype), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, dir_ino) + __field(unsigned int, namelen) + __dynamic_array(char, name, namelen + 1) + __field(xfs_ino_t, ino) + __field(uint8_t, ftype) + ), + TP_fast_assign( + __entry->dev = dp->i_mount->m_super->s_dev; + __entry->dir_ino = dp->i_ino; + __entry->namelen = namelen; + memcpy(__get_str(name), name, namelen); + __get_str(name)[namelen] = 0; + __entry->ino = ino; + __entry->ftype = ftype; + ), + TP_printk("dev %d:%d dir 0x%llx name '%.*s' ino 0x%llx ftype %s", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->dir_ino, + __entry->namelen, + __get_str(name), + __entry->ino, + __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR)) +); + #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */ #endif /* _TRACE_XFS_SCRUB_TRACE_H */ |