From: Dave Chinner <dchinner@xxxxxxxxxx> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> --- include/libxlog.h | 1 + logprint/log_misc.c | 36 ++++++++++++++++++++++++++++++++++++ logprint/log_print_all.c | 21 +++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/include/libxlog.h b/include/libxlog.h index bd71bfe..ff711e9 100644 --- a/include/libxlog.h +++ b/include/libxlog.h @@ -51,6 +51,7 @@ struct xlog { #include <xfs/xfs_buf_item.h> #include <xfs/xfs_inode_item.h> #include <xfs/xfs_extfree_item.h> +#include <xfs/xfs_icreate_item.h> typedef union { xlog_rec_header_t hic_header; diff --git a/logprint/log_misc.c b/logprint/log_misc.c index 7012208..9526ec4 100644 --- a/logprint/log_misc.c +++ b/logprint/log_misc.c @@ -70,6 +70,7 @@ char *trans_type[] = { "SWAPEXT", "SB_COUNT", "CHECKPOINT", + "ICREATE", }; typedef struct xlog_split_item { @@ -792,6 +793,35 @@ xlog_print_trans_dquot(xfs_caddr_t *ptr, int len, int *i, int num_ops) } /* xlog_print_trans_dquot */ +STATIC int +xlog_print_trans_icreate( + xfs_caddr_t *ptr, + int len, + int *i, + int num_ops) +{ + struct xfs_icreate_log icl_buf = {0}; + struct xfs_icreate_log *icl; + + memmove(&icl_buf, *ptr, MIN(sizeof(struct xfs_icreate_log), len)); + icl = &icl_buf; + (*i)++; + *ptr += len; + + /* handle complete header only */ + if (len != sizeof(struct xfs_icreate_log)) { + printf(_("ICR: split header, not printing\n")); + return 1; /* to skip leftover in next region */ + } + + printf(_("ICR: #ag: %d agbno: 0x%x len: %d\n" + " cnt: %d isize: %d gen: 0x%x\n"), + be32_to_cpu(icl->icl_ag), be32_to_cpu(icl->icl_agbno), + be32_to_cpu(icl->icl_length), be32_to_cpu(icl->icl_count), + be32_to_cpu(icl->icl_isize), be32_to_cpu(icl->icl_gen)); + return 0; +} + /****************************************************************************** * * Log print routines @@ -974,6 +1004,12 @@ xlog_print_record(int fd, &i, num_ops); break; } + case XFS_LI_ICREATE: { + skip = xlog_print_trans_icreate(&ptr, + be32_to_cpu(op_head->oh_len), + &i, num_ops); + break; + } case XFS_LI_INODE: { skip = xlog_print_trans_inode(&ptr, be32_to_cpu(op_head->oh_len), diff --git a/logprint/log_print_all.c b/logprint/log_print_all.c index 4626186..7f87016 100644 --- a/logprint/log_print_all.c +++ b/logprint/log_print_all.c @@ -435,6 +435,21 @@ xlog_recover_print_efi( free(f); } +STATIC void +xlog_recover_print_icreate( + struct xlog_recover_item *item) +{ + struct xfs_icreate_log *icl; + + icl = (struct xfs_icreate_log *)item->ri_buf[0].i_addr; + + printf(_(" ICR: #ag: %d agbno: 0x%x len: %d\n" + " cnt: %d isize: %d gen: 0x%x\n"), + be32_to_cpu(icl->icl_ag), be32_to_cpu(icl->icl_agbno), + be32_to_cpu(icl->icl_length), be32_to_cpu(icl->icl_count), + be32_to_cpu(icl->icl_isize), be32_to_cpu(icl->icl_gen)); +} + void xlog_recover_print_logitem( xlog_recover_item_t *item) @@ -443,6 +458,9 @@ xlog_recover_print_logitem( case XFS_LI_BUF: xlog_recover_print_buffer(item); break; + case XFS_LI_ICREATE: + xlog_recover_print_icreate(item); + break; case XFS_LI_INODE: xlog_recover_print_inode(item); break; @@ -474,6 +492,9 @@ xlog_recover_print_item( case XFS_LI_BUF: printf("BUF"); break; + case XFS_LI_ICREATE: + printf("ICR"); + break; case XFS_LI_INODE: printf("INO"); break; -- 1.8.3.2 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs