From a9a32fcb9176c82aed6d85f209e7279b76c8b55f Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Fri, 20 Nov 2020 17:03:28 -0500 Subject: [PATCH] xfs_db: refactor quota timer printing Introduce type-specific printing functions to xfs_db to print a quota timer instead of printing a raw int32 value. This is needed to stay ahead of changes that we're going to make to the quota timer format in the following patches. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: Eric Sandeen --- diff --git a/db/dquot.c b/db/dquot.c index dd9e83f..5c82456 100644 --- a/db/dquot.c +++ b/db/dquot.c @@ -60,8 +60,8 @@ const field_t disk_dquot_flds[] = { TYP_NONE }, { "bcount", FLDT_QCNT, OI(DOFF(bcount)), C1, 0, TYP_NONE }, { "icount", FLDT_QCNT, OI(DOFF(icount)), C1, 0, TYP_NONE }, - { "itimer", FLDT_INT32D, OI(DOFF(itimer)), C1, 0, TYP_NONE }, - { "btimer", FLDT_INT32D, OI(DOFF(btimer)), C1, 0, TYP_NONE }, + { "itimer", FLDT_QTIMER, OI(DOFF(itimer)), C1, 0, TYP_NONE }, + { "btimer", FLDT_QTIMER, OI(DOFF(btimer)), C1, 0, TYP_NONE }, { "iwarns", FLDT_QWARNCNT, OI(DOFF(iwarns)), C1, 0, TYP_NONE }, { "bwarns", FLDT_QWARNCNT, OI(DOFF(bwarns)), C1, 0, TYP_NONE }, { "pad0", FLDT_UINT32X, OI(DOFF(pad0)), C1, FLD_SKIPALL, TYP_NONE }, @@ -70,7 +70,7 @@ const field_t disk_dquot_flds[] = { { "rtb_softlimit", FLDT_QCNT, OI(DOFF(rtb_softlimit)), C1, 0, TYP_NONE }, { "rtbcount", FLDT_QCNT, OI(DOFF(rtbcount)), C1, 0, TYP_NONE }, - { "rtbtimer", FLDT_INT32D, OI(DOFF(rtbtimer)), C1, 0, TYP_NONE }, + { "rtbtimer", FLDT_QTIMER, OI(DOFF(rtbtimer)), C1, 0, TYP_NONE }, { "rtbwarns", FLDT_QWARNCNT, OI(DOFF(rtbwarns)), C1, 0, TYP_NONE }, { "pad", FLDT_UINT16X, OI(DOFF(pad)), C1, FLD_SKIPALL, TYP_NONE }, { NULL } diff --git a/db/field.c b/db/field.c index a187a72..770acda 100644 --- a/db/field.c +++ b/db/field.c @@ -351,6 +351,8 @@ const ftattr_t ftattrtab[] = { FTARG_SIGNED, NULL, NULL }, { FLDT_TIMESTAMP, "timestamp", NULL, (char *)timestamp_flds, SI(bitsz(xfs_timestamp_t)), 0, NULL, timestamp_flds }, + { FLDT_QTIMER, "qtimer", fp_qtimer, NULL, SI(bitsz(uint32_t)), 0, + NULL, NULL }, { FLDT_UINT1, "uint1", fp_num, "%u", SI(1), 0, NULL, NULL }, { FLDT_UINT16D, "uint16d", fp_num, "%u", SI(bitsz(uint16_t)), 0, NULL, NULL }, diff --git a/db/field.h b/db/field.h index 1506537..387c189 100644 --- a/db/field.h +++ b/db/field.h @@ -170,6 +170,7 @@ typedef enum fldt { FLDT_TIME, FLDT_TIMESTAMP, + FLDT_QTIMER, FLDT_UINT1, FLDT_UINT16D, FLDT_UINT16O, diff --git a/db/fprint.c b/db/fprint.c index 6e72bf0..72ed55f 100644 --- a/db/fprint.c +++ b/db/fprint.c @@ -180,6 +180,40 @@ fp_nsec( return 1; } +int +fp_qtimer( + void *obj, + int bit, + int count, + char *fmtstr, + int size, + int arg, + int base, + int array) +{ + uint32_t sec; + __be32 *t; + int bitpos; + int i; + + ASSERT(bitoffs(bit) == 0); + for (i = 0, bitpos = bit; + i < count && !seenint(); + i++, bitpos += size) { + if (array) + dbprintf("%d:", i + base); + + t = obj + byteize(bitpos); + sec = be32_to_cpu(*t); + + dbprintf("%u", sec); + + if (i < count - 1) + dbprintf(" "); + } + return 1; +} + /*ARGSUSED*/ int fp_uuid( diff --git a/db/fprint.h b/db/fprint.h index bfeed15..a1ea935 100644 --- a/db/fprint.h +++ b/db/fprint.h @@ -17,6 +17,8 @@ extern int fp_time(void *obj, int bit, int count, char *fmtstr, int size, int arg, int base, int array); extern int fp_nsec(void *obj, int bit, int count, char *fmtstr, int size, int arg, int base, int array); +extern int fp_qtimer(void *obj, int bit, int count, char *fmtstr, int size, + int arg, int base, int array); extern int fp_uuid(void *obj, int bit, int count, char *fmtstr, int size, int arg, int base, int array); extern int fp_crc(void *obj, int bit, int count, char *fmtstr, int size,