]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: print transaction reservation type information
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 9 Mar 2018 02:35:23 +0000 (20:35 -0600)
committerEric Sandeen <sandeen@redhat.com>
Fri, 9 Mar 2018 02:35:23 +0000 (20:35 -0600)
Create a new xfs_db command to print the transaction reservation info for
a given filesystem.  This will make it easier to compare the calculations
made by the kernel and xfsprogs in case there is a discrepancy.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/command.c
db/logformat.c
db/logformat.h
libxfs/libxfs_api_defs.h
man/man8/xfs_db.8

index 5ff3c4f0b40a0536e94c34593c67ad9893e4336b..12ae5b781b36e8f2461402fe87963e9e5f162bf9 100644 (file)
@@ -138,6 +138,7 @@ init_commands(void)
        hash_init();
        inode_init();
        input_init();
+       logres_init();
        logformat_init();
        io_init();
        metadump_init();
index 70097bc18488ccdad05a7381d025c4ad309b9d27..b290bd35476e340098de9bf3e8e0e4f273fd027d 100644 (file)
@@ -147,3 +147,62 @@ logformat_init(void)
 
        add_command(&logformat_cmd);
 }
+
+static void
+print_logres(
+       int                     i,
+       struct xfs_trans_res    *res)
+{
+       dbprintf(_("type %d logres %u logcount %d flags 0x%x\n"),
+               i, res->tr_logres, res->tr_logcount, res->tr_logflags);
+}
+
+int
+logres_f(
+       int                     argc,
+       char                    **argv)
+{
+       struct xfs_trans_res    resv;
+       struct xfs_trans_res    *res;
+       struct xfs_trans_res    *end_res;
+       int                     i;
+
+       res = (struct xfs_trans_res *)M_RES(mp);
+       end_res = (struct xfs_trans_res *)(M_RES(mp) + 1);
+       for (i = 0; res < end_res; i++, res++)
+               print_logres(i, res);
+       libxfs_log_get_max_trans_res(mp, &resv);
+       print_logres(-1, &resv);
+
+       return 0;
+}
+
+static void
+logres_help(void)
+{
+       dbprintf(_(
+"\n"
+" The 'logres' command prints information about all log reservation types.\n"
+" This includes the reservation space, the intended transaction roll count,\n"
+" and the reservation flags, if any.\n"
+"\n"
+       ));
+}
+
+static const struct cmdinfo logres_cmd = {
+       .name =         "logres",
+       .altname =      NULL,
+       .cfunc =        logres_f,
+       .argmin =       0,
+       .argmax =       0,
+       .canpush =      0,
+       .args =         NULL,
+       .oneline =      N_("dump log reservations"),
+       .help =         logres_help,
+};
+
+void
+logres_init(void)
+{
+       add_command(&logres_cmd);
+}
index f9763ee3150ab3f9efb513ff6d1a8b285567a05e..60396c07db8d1308bd7be1bb3c50ef3162d330cc 100644 (file)
@@ -17,3 +17,4 @@
  */
 
 void logformat_init(void);
+void logres_init(void);
index d2ab02a5dc20ebce196175e6265694dfe8b354d8..5d56340c06b9954fd41831160aa60b38c526efdf 100644 (file)
@@ -60,7 +60,7 @@
 #define xfs_trans_roll                 libxfs_trans_roll
 #define xfs_trans_get_buf_map          libxfs_trans_get_buf_map
 #define xfs_trans_resv_calc            libxfs_trans_resv_calc
-
+#define xfs_log_get_max_trans_res      libxfs_log_get_max_trans_res
 #define xfs_attr_get                   libxfs_attr_get
 #define xfs_attr_set                   libxfs_attr_set
 #define xfs_attr_remove                        libxfs_attr_remove
index 37018a7a37a23aec2a233e8173a8cf8419407c14..524b1ef61af3c2fe69b5fe32dfe2384b61de6914 100644 (file)
@@ -690,6 +690,12 @@ Start logging output to
 .IR filename ,
 stop logging, or print the current logging status.
 .TP
+.B logres
+Print transaction reservation size information for each transaction type.
+This makes it easier to find discrepancies in the reservation calculations
+between xfsprogs and the kernel, which will help when diagnosing minimum
+log size calculation errors.
+.TP
 .BI "metadump [\-egow] " filename
 Dumps metadata to a file. See
 .BR xfs_metadump (8)