]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfsprogs: teach logprint about icreate transaction
authorDave Chinner <dchinner@redhat.com>
Wed, 4 Sep 2013 22:05:07 +0000 (22:05 +0000)
committerRich Johnston <rjohnston@sgi.com>
Mon, 16 Sep 2013 20:14:40 +0000 (15:14 -0500)
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Review-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Rich Johnston <rjohnston@sgi.com>
include/libxlog.h
logprint/log_misc.c
logprint/log_print_all.c

index bd71bfe200bfcdf7059c1a8bbf6ca0ec1fb566cf..ff711e9685b15f978d27845369153051881ec520 100644 (file)
@@ -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;
index a369e72571772a0e70c5e51cd979eb92d5b6e1e5..623245e6c2db3477a2c4a25146550bb437610871 100644 (file)
@@ -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),
index 11944695bc92856aecc51a3b94d0ad8255844ea1..8b932d272402df00dd49cbe95f3f6c75a28803c9 100644 (file)
@@ -432,6 +432,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)
@@ -440,6 +455,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;
@@ -471,6 +489,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;