xfs
[Top] [All Lists]

[PATCH 03/49] xfsprogs: teach logprint about icreate transaction

To: xfs@xxxxxxxxxxx
Subject: [PATCH 03/49] xfsprogs: teach logprint about icreate transaction
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Fri, 19 Jul 2013 16:44:38 +1000
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1374216324-8781-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1374216324-8781-1-git-send-email-david@xxxxxxxxxxxxx>
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

<Prev in Thread] Current Thread [Next in Thread>