On 3/1/18 1:13 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > 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@xxxxxxxxxx> Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > db/command.c | 1 + > db/logformat.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++ > db/logformat.h | 1 + > libxfs/libxfs_api_defs.h | 2 +- > man/man8/xfs_db.8 | 6 +++++ > 5 files changed, 68 insertions(+), 1 deletion(-) > > > diff --git a/db/command.c b/db/command.c > index 5ff3c4f..12ae5b7 100644 > --- a/db/command.c > +++ b/db/command.c > @@ -138,6 +138,7 @@ init_commands(void) > hash_init(); > inode_init(); > input_init(); > + logres_init(); > logformat_init(); > io_init(); > metadump_init(); > diff --git a/db/logformat.c b/db/logformat.c > index 70097bc..b290bd3 100644 > --- a/db/logformat.c > +++ b/db/logformat.c > @@ -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); > +} > diff --git a/db/logformat.h b/db/logformat.h > index f9763ee..60396c0 100644 > --- a/db/logformat.h > +++ b/db/logformat.h > @@ -17,3 +17,4 @@ > */ > > void logformat_init(void); > +void logres_init(void); > diff --git a/libxfs/libxfs_api_defs.h b/libxfs/libxfs_api_defs.h > index d2ab02a..5d56340 100644 > --- a/libxfs/libxfs_api_defs.h > +++ b/libxfs/libxfs_api_defs.h > @@ -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 > diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8 > index 37018a7..524b1ef 100644 > --- a/man/man8/xfs_db.8 > +++ b/man/man8/xfs_db.8 > @@ -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) > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html