From 188960ea4b830ec69607aab3068537ce55f44be4 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 9 Dec 2013 13:55:23 -0500 Subject: [PATCH] debugfs: add support to properly set and display extended timestamps This code is partially derived from patches from David Turner to allow debugfs to properly support extended timestamps. Cc: David Turner Signed-off-by: "Theodore Ts'o" --- debugfs/debugfs.c | 34 +++++++++++++++++++++------------ debugfs/debugfs.h | 7 ++++--- debugfs/lsdel.c | 2 +- debugfs/set_fields.c | 45 +++++++++++++++++++++++++++++--------------- debugfs/util.c | 34 +++++++++++++++++++++++---------- lib/ext2fs/ext2_fs.h | 7 +++++++ 6 files changed, 88 insertions(+), 41 deletions(-) diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c index 175fb90f..735117eb 100644 --- a/debugfs/debugfs.c +++ b/debugfs/debugfs.c @@ -866,27 +866,37 @@ void internal_dump_inode(FILE *out, const char *prefix, if (is_large_inode && large_inode->i_extra_isize >= 24) { fprintf(out, "%s ctime: 0x%08x:%08x -- %s", prefix, inode->i_ctime, large_inode->i_ctime_extra, - time_to_string(inode->i_ctime)); + inode_time_to_string(inode->i_ctime, + large_inode->i_ctime_extra)); fprintf(out, "%s atime: 0x%08x:%08x -- %s", prefix, inode->i_atime, large_inode->i_atime_extra, - time_to_string(inode->i_atime)); + inode_time_to_string(inode->i_atime, + large_inode->i_atime_extra)); fprintf(out, "%s mtime: 0x%08x:%08x -- %s", prefix, inode->i_mtime, large_inode->i_mtime_extra, - time_to_string(inode->i_mtime)); + inode_time_to_string(inode->i_mtime, + large_inode->i_mtime_extra)); fprintf(out, "%scrtime: 0x%08x:%08x -- %s", prefix, large_inode->i_crtime, large_inode->i_crtime_extra, - time_to_string(large_inode->i_crtime)); + inode_time_to_string(large_inode->i_crtime, + large_inode->i_crtime_extra)); + if (inode->i_dtime) + fprintf(out, "%scrtime: 0x%08x:(%08x) -- %s", prefix, + large_inode->i_dtime, large_inode->i_ctime_extra, + inode_time_to_string(inode->i_dtime, + large_inode->i_ctime_extra)); } else { fprintf(out, "%sctime: 0x%08x -- %s", prefix, inode->i_ctime, - time_to_string(inode->i_ctime)); + time_to_string((__s32) inode->i_ctime)); fprintf(out, "%satime: 0x%08x -- %s", prefix, inode->i_atime, - time_to_string(inode->i_atime)); + time_to_string((__s32) inode->i_atime)); fprintf(out, "%smtime: 0x%08x -- %s", prefix, inode->i_mtime, - time_to_string(inode->i_mtime)); + time_to_string((__s32) inode->i_mtime)); + if (inode->i_dtime) + fprintf(out, "%sdtime: 0x%08x -- %s", prefix, + inode->i_dtime, + time_to_string((__s32) inode->i_dtime)); } - if (inode->i_dtime) - fprintf(out, "%sdtime: 0x%08x -- %s", prefix, inode->i_dtime, - time_to_string(inode->i_dtime)); if (EXT2_INODE_SIZE(current_fs->super) > EXT2_GOOD_OLD_INODE_SIZE) internal_dump_inode_extra(out, prefix, inode_num, (struct ext2_inode_large *) inode); @@ -2074,14 +2084,14 @@ err: #ifndef READ_ONLY void do_set_current_time(int argc, char *argv[]) { - time_t now; + __s64 now; if (common_args_process(argc, argv, 2, 2, argv[0], "