]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_logprint: report realtime EFIs
authorDarrick J. Wong <djwong@kernel.org>
Thu, 21 Nov 2024 00:24:33 +0000 (16:24 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 24 Dec 2024 02:01:33 +0000 (18:01 -0800)
Decode the EFI format just enough to report if an EFI targets the
realtime device or not.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
logprint/log_misc.c
logprint/log_print_all.c
logprint/log_redo.c

index 8e86ac347fa9632ef799b0e454564d34f60f7f40..1df8c5d377c02dba75d4de96b0aceea291187ae0 100644 (file)
@@ -997,12 +997,14 @@ xlog_print_record(
                                        &i, num_ops);
                        break;
                    }
+                   case XFS_LI_EFI_RT:
                    case XFS_LI_EFI: {
                        skip = xlog_print_trans_efi(&ptr,
                                        be32_to_cpu(op_head->oh_len),
                                        continued);
                        break;
                    }
+                   case XFS_LI_EFD_RT:
                    case XFS_LI_EFD: {
                        skip = xlog_print_trans_efd(&ptr,
                                        be32_to_cpu(op_head->oh_len));
index a4a5e41f17fa64c273a471693a01f5b3d09654a7..5a9ddd05ab12887a1bd89cf8ace5910a65f0e2b3 100644 (file)
@@ -410,9 +410,11 @@ xlog_recover_print_logitem(
        case XFS_LI_INODE:
                xlog_recover_print_inode(item);
                break;
+       case XFS_LI_EFD_RT:
        case XFS_LI_EFD:
                xlog_recover_print_efd(item);
                break;
+       case XFS_LI_EFI_RT:
        case XFS_LI_EFI:
                xlog_recover_print_efi(item);
                break;
@@ -474,6 +476,12 @@ xlog_recover_print_item(
        case XFS_LI_INODE:
                printf("INO");
                break;
+       case XFS_LI_EFD_RT:
+               printf("EFD_RT");
+               break;
+       case XFS_LI_EFI_RT:
+               printf("EFI_RT");
+               break;
        case XFS_LI_EFD:
                printf("EFD");
                break;
index 684e5f4a3f32c25a6193ff06328aeaed4ee85ce8..41e7c94a52dc216ceae864326b5aa0630f4ee2aa 100644 (file)
@@ -67,6 +67,7 @@ xlog_print_trans_efi(
        uint                    src_len,
        int                     continued)
 {
+       const char              *item_name = "EFI?";
        xfs_efi_log_format_t    *src_f, *f = NULL;
        uint                    dst_len;
        xfs_extent_t            *ex;
@@ -103,8 +104,14 @@ xlog_print_trans_efi(
                goto error;
        }
 
-       printf(_("EFI:  #regs: %d       num_extents: %d  id: 0x%llx\n"),
-               f->efi_size, f->efi_nextents, (unsigned long long)f->efi_id);
+       switch (f->efi_type) {
+       case XFS_LI_EFI:        item_name = "EFI"; break;
+       case XFS_LI_EFI_RT:     item_name = "EFI_RT"; break;
+       }
+
+       printf(_("%s:  #regs: %d        num_extents: %u  id: 0x%llx\n"),
+                       item_name, f->efi_size, f->efi_nextents,
+                       (unsigned long long)f->efi_id);
 
        if (continued) {
                printf(_("EFI free extent data skipped (CONTINUE set, no space)\n"));
@@ -113,7 +120,7 @@ xlog_print_trans_efi(
 
        ex = f->efi_extents;
        for (i=0; i < f->efi_nextents; i++) {
-               printf("(s: 0x%llx, l: %d) ",
+               printf("(s: 0x%llx, l: %u) ",
                        (unsigned long long)ex->ext_start, ex->ext_len);
                if (i % 4 == 3) printf("\n");
                ex++;
@@ -130,6 +137,7 @@ void
 xlog_recover_print_efi(
        struct xlog_recover_item *item)
 {
+       const char              *item_name = "EFI?";
        xfs_efi_log_format_t    *f, *src_f;
        xfs_extent_t            *ex;
        int                     i;
@@ -155,12 +163,18 @@ xlog_recover_print_efi(
                return;
        }
 
-       printf(_("      EFI:  #regs:%d  num_extents:%d  id:0x%llx\n"),
-                  f->efi_size, f->efi_nextents, (unsigned long long)f->efi_id);
+       switch (f->efi_type) {
+       case XFS_LI_EFI:        item_name = "EFI"; break;
+       case XFS_LI_EFI_RT:     item_name = "EFI_RT"; break;
+       }
+
+       printf(_("      %s:  #regs:%d   num_extents:%u  id:0x%llx\n"),
+                       item_name, f->efi_size, f->efi_nextents,
+                       (unsigned long long)f->efi_id);
        ex = f->efi_extents;
        printf("        ");
        for (i=0; i< f->efi_nextents; i++) {
-               printf("(s: 0x%llx, l: %d) ",
+               printf("(s: 0x%llx, l: %u) ",
                        (unsigned long long)ex->ext_start, ex->ext_len);
                if (i % 4 == 3)
                        printf("\n");
@@ -174,8 +188,10 @@ xlog_recover_print_efi(
 int
 xlog_print_trans_efd(char **ptr, uint len)
 {
-       xfs_efd_log_format_t *f;
-       xfs_efd_log_format_t lbuf;
+       const char              *item_name = "EFD?";
+       xfs_efd_log_format_t    *f;
+       xfs_efd_log_format_t    lbuf;
+
        /* size without extents at end */
        uint core_size = sizeof(xfs_efd_log_format_t);
 
@@ -185,11 +201,17 @@ xlog_print_trans_efd(char **ptr, uint len)
         */
        memmove(&lbuf, *ptr, min(core_size, len));
        f = &lbuf;
+
+       switch (f->efd_type) {
+       case XFS_LI_EFD:        item_name = "EFD"; break;
+       case XFS_LI_EFD_RT:     item_name = "EFD_RT"; break;
+       }
+
        *ptr += len;
        if (len >= core_size) {
-               printf(_("EFD:  #regs: %d       num_extents: %d  id: 0x%llx\n"),
-                       f->efd_size, f->efd_nextents,
-                       (unsigned long long)f->efd_efi_id);
+               printf(_("%s:  #regs: %d        num_extents: %d  id: 0x%llx\n"),
+                               item_name, f->efd_size, f->efd_nextents,
+                               (unsigned long long)f->efd_efi_id);
 
                /* don't print extents as they are not used */
 
@@ -204,18 +226,25 @@ void
 xlog_recover_print_efd(
        struct xlog_recover_item *item)
 {
+       const char              *item_name = "EFD?";
        xfs_efd_log_format_t    *f;
 
        f = (xfs_efd_log_format_t *)item->ri_buf[0].i_addr;
+
+       switch (f->efd_type) {
+       case XFS_LI_EFD:        item_name = "EFD"; break;
+       case XFS_LI_EFD_RT:     item_name = "EFD_RT"; break;
+       }
+
        /*
         * An xfs_efd_log_format structure contains a variable length array
         * as the last field.
         * Each element is of size xfs_extent_32_t or xfs_extent_64_t.
         * However, the extents are never used and won't be printed.
         */
-       printf(_("      EFD:  #regs: %d num_extents: %d  id: 0x%llx\n"),
-               f->efd_size, f->efd_nextents,
-               (unsigned long long)f->efd_efi_id);
+       printf(_("      %s:  #regs: %d  num_extents: %d  id: 0x%llx\n"),
+                       item_name, f->efd_size, f->efd_nextents,
+                       (unsigned long long)f->efd_efi_id);
 }
 
 /* Reverse Mapping Update Items */