From: Darrick J. Wong Date: Fri, 20 Nov 2020 22:03:27 +0000 (-0500) Subject: xfs_db: refactor timestamp printing X-Git-Tag: xfsprogs-5.10-fixes_2020-12-06~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=300422226c423222e78d82d54b09d0ae27c7d4af;p=thirdparty%2Fxfsprogs-dev.git xfs_db: refactor timestamp printing Introduce type-specific printing functions to xfs_db to print an xfs_timestamp instead of open-coding the timestamp decoding. This is needed to stay ahead of changes that we're going to make to xfs_timestamp_t in the following patches. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: Eric Sandeen --- diff --git a/db/field.c b/db/field.c index 7ccfbfb13..f0316aeb4 100644 --- a/db/field.c +++ b/db/field.c @@ -334,8 +334,8 @@ const ftattr_t ftattrtab[] = { FTARG_SIGNED, NULL, NULL }, { FLDT_INT8D, "int8d", fp_num, "%d", SI(bitsz(int8_t)), FTARG_SIGNED, NULL, NULL }, - { FLDT_NSEC, "nsec", fp_num, "%09d", SI(bitsz(int32_t)), FTARG_SIGNED, - NULL, NULL }, + { FLDT_NSEC, "nsec", fp_nsec, NULL, SI(bitsz(xfs_timestamp_t)), + FTARG_SIGNED, NULL, NULL }, { FLDT_QCNT, "qcnt", fp_num, "%llu", SI(bitsz(xfs_qcnt_t)), 0, NULL, NULL }, { FLDT_QWARNCNT, "qwarncnt", fp_num, "%u", SI(bitsz(xfs_qwarncnt_t)), 0, @@ -347,10 +347,10 @@ const ftattr_t ftattrtab[] = { { FLDT_SYMLINK_CRC, "symlink", NULL, (char *)symlink_crc_flds, symlink_size, FTARG_SIZE, NULL, symlink_crc_flds }, - { FLDT_TIME, "time", fp_time, NULL, SI(bitsz(int32_t)), FTARG_SIGNED, - NULL, NULL }, + { FLDT_TIME, "time", fp_time, NULL, SI(bitsz(xfs_timestamp_t)), + FTARG_SIGNED, NULL, NULL }, { FLDT_TIMESTAMP, "timestamp", NULL, (char *)timestamp_flds, - SI(bitsz(struct xfs_legacy_timestamp)), 0, NULL, timestamp_flds }, + SI(bitsz(xfs_timestamp_t)), 0, NULL, timestamp_flds }, { 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/fprint.c b/db/fprint.c index c9d07e1bc..6e72bf076 100644 --- a/db/fprint.c +++ b/db/fprint.c @@ -112,22 +112,21 @@ fp_sarray( return 1; } -/*ARGSUSED*/ int fp_time( - void *obj, - int bit, - int count, - char *fmtstr, - int size, - int arg, - int base, - int array) + void *obj, + int bit, + int count, + char *fmtstr, + int size, + int arg, + int base, + int array) { - int bitpos; - char *c; - int i; - time_t t; + struct timespec64 tv; + xfs_timestamp_t *ts; + int bitpos; + int i; ASSERT(bitoffs(bit) == 0); for (i = 0, bitpos = bit; @@ -135,10 +134,46 @@ fp_time( i++, bitpos += size) { if (array) dbprintf("%d:", i + base); - t = (time_t)getbitval((char *)obj + byteize(bitpos), 0, - sizeof(int32_t) * 8, BVSIGNED); - c = ctime(&t); - dbprintf("%24.24s", c); + + ts = obj + byteize(bitpos); + tv = libxfs_inode_from_disk_ts(obj, *ts); + + dbprintf("%24.24s", tv.tv_sec); + + if (i < count - 1) + dbprintf(" "); + } + return 1; +} + +int +fp_nsec( + void *obj, + int bit, + int count, + char *fmtstr, + int size, + int arg, + int base, + int array) +{ + struct timespec64 tv; + xfs_timestamp_t *ts; + 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); + + ts = obj + byteize(bitpos); + tv = libxfs_inode_from_disk_ts(obj, *ts); + + dbprintf("%u", tv.tv_nsec); + if (i < count - 1) dbprintf(" "); } diff --git a/db/fprint.h b/db/fprint.h index c958dca0e..bfeed15ca 100644 --- a/db/fprint.h +++ b/db/fprint.h @@ -15,6 +15,8 @@ extern int fp_sarray(void *obj, int bit, int count, char *fmtstr, int size, int arg, int base, int array); 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_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, diff --git a/db/inode.c b/db/inode.c index 06fa07826..a75667d66 100644 --- a/db/inode.c +++ b/db/inode.c @@ -179,10 +179,9 @@ const field_t inode_v3_flds[] = { }; -#define TOFF(f) bitize(offsetof(struct xfs_legacy_timestamp, t_ ## f)) const field_t timestamp_flds[] = { - { "sec", FLDT_TIME, OI(TOFF(sec)), C1, 0, TYP_NONE }, - { "nsec", FLDT_NSEC, OI(TOFF(nsec)), C1, 0, TYP_NONE }, + { "sec", FLDT_TIME, OI(0), C1, 0, TYP_NONE }, + { "nsec", FLDT_NSEC, OI(0), C1, 0, TYP_NONE }, { NULL } }; diff --git a/libxfs/libxfs_api_defs.h b/libxfs/libxfs_api_defs.h index 8a93e2cc5..01d047702 100644 --- a/libxfs/libxfs_api_defs.h +++ b/libxfs/libxfs_api_defs.h @@ -116,6 +116,7 @@ #define xfs_inobt_maxrecs libxfs_inobt_maxrecs #define xfs_inobt_stage_cursor libxfs_inobt_stage_cursor #define xfs_inode_from_disk libxfs_inode_from_disk +#define xfs_inode_from_disk_ts libxfs_inode_from_disk_ts #define xfs_inode_to_disk libxfs_inode_to_disk #define xfs_inode_validate_cowextsize libxfs_inode_validate_cowextsize #define xfs_inode_validate_extsize libxfs_inode_validate_extsize