btrfs-progs: dump-tree: print c/o/s/r time of ROOT_ITEM

Currently ctime/otime/stime/rtime of ROOT_ITEM are not printed in
print_root_item().  Fix this and print them if the values are not zero.
The function print_timespec() is moved forward to reuse.

Signed-off-by: Tomohiro Misono <misono.tomohiro@jp.fujitsu.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Misono, Tomohiro 2017-10-31 14:40:24 +09:00 committed by David Sterba
parent 89568f1bdf
commit f23506c8a4
2 changed files with 64 additions and 20 deletions

32
ctree.h
View File

@ -2072,6 +2072,38 @@ BTRFS_SETGET_STACK_FUNCS(root_stransid, struct btrfs_root_item,
BTRFS_SETGET_STACK_FUNCS(root_rtransid, struct btrfs_root_item, BTRFS_SETGET_STACK_FUNCS(root_rtransid, struct btrfs_root_item,
rtransid, 64); rtransid, 64);
static inline struct btrfs_timespec* btrfs_root_ctime(
struct btrfs_root_item *root_item)
{
unsigned long ptr = (unsigned long)root_item;
ptr += offsetof(struct btrfs_root_item, ctime);
return (struct btrfs_timespec *)ptr;
}
static inline struct btrfs_timespec* btrfs_root_otime(
struct btrfs_root_item *root_item)
{
unsigned long ptr = (unsigned long)root_item;
ptr += offsetof(struct btrfs_root_item, otime);
return (struct btrfs_timespec *)ptr;
}
static inline struct btrfs_timespec* btrfs_root_stime(
struct btrfs_root_item *root_item)
{
unsigned long ptr = (unsigned long)root_item;
ptr += offsetof(struct btrfs_root_item, stime);
return (struct btrfs_timespec *)ptr;
}
static inline struct btrfs_timespec* btrfs_root_rtime(
struct btrfs_root_item *root_item)
{
unsigned long ptr = (unsigned long)root_item;
ptr += offsetof(struct btrfs_root_item, rtime);
return (struct btrfs_timespec *)ptr;
}
/* struct btrfs_root_backup */ /* struct btrfs_root_backup */
BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup, BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup,
tree_root, 64); tree_root, 64);

View File

@ -551,6 +551,26 @@ static void root_flags_to_str(u64 flags, char *ret)
strcat(ret, "none"); strcat(ret, "none");
} }
static void print_timespec(struct extent_buffer *eb,
struct btrfs_timespec *timespec, const char *prefix,
const char *suffix)
{
struct tm tm;
u64 tmp_u64;
u32 tmp_u32;
time_t tmp_time;
char timestamp[256];
tmp_u64 = btrfs_timespec_sec(eb, timespec);
tmp_u32 = btrfs_timespec_nsec(eb, timespec);
tmp_time = tmp_u64;
localtime_r(&tmp_time, &tm);
strftime(timestamp, sizeof(timestamp),
"%Y-%m-%d %H:%M:%S", &tm);
printf("%s%llu.%u (%s)%s", prefix, (unsigned long long)tmp_u64, tmp_u32,
timestamp, suffix);
}
static void print_root_item(struct extent_buffer *leaf, int slot) static void print_root_item(struct extent_buffer *leaf, int slot)
{ {
struct btrfs_root_item *ri; struct btrfs_root_item *ri;
@ -598,6 +618,18 @@ static void print_root_item(struct extent_buffer *leaf, int slot)
btrfs_root_stransid(&root_item), btrfs_root_stransid(&root_item),
btrfs_root_rtransid(&root_item)); btrfs_root_rtransid(&root_item));
} }
if (btrfs_timespec_sec(leaf, btrfs_root_ctime(ri)))
print_timespec(leaf, btrfs_root_ctime(ri),
"\t\tctime ", "\n");
if (btrfs_timespec_sec(leaf, btrfs_root_otime(ri)))
print_timespec(leaf, btrfs_root_otime(ri),
"\t\totime ", "\n");
if (btrfs_timespec_sec(leaf, btrfs_root_stime(ri)))
print_timespec(leaf, btrfs_root_stime(ri),
"\t\tstime ", "\n");
if (btrfs_timespec_sec(leaf, btrfs_root_rtime(ri)))
print_timespec(leaf, btrfs_root_rtime(ri),
"\t\trtime ", "\n");
} }
btrfs_disk_key_to_cpu(&drop_key, &root_item.drop_progress); btrfs_disk_key_to_cpu(&drop_key, &root_item.drop_progress);
@ -867,26 +899,6 @@ static void inode_flags_to_str(u64 flags, char *ret)
strcat(ret, "none"); strcat(ret, "none");
} }
static void print_timespec(struct extent_buffer *eb,
struct btrfs_timespec *timespec, const char *prefix,
const char *suffix)
{
struct tm tm;
u64 tmp_u64;
u32 tmp_u32;
time_t tmp_time;
char timestamp[256];
tmp_u64 = btrfs_timespec_sec(eb, timespec);
tmp_u32 = btrfs_timespec_nsec(eb, timespec);
tmp_time = tmp_u64;
localtime_r(&tmp_time, &tm);
strftime(timestamp, sizeof(timestamp),
"%Y-%m-%d %H:%M:%S", &tm);
printf("%s%llu.%u (%s)%s", prefix, (unsigned long long)tmp_u64, tmp_u32,
timestamp, suffix);
}
static void print_inode_item(struct extent_buffer *eb, static void print_inode_item(struct extent_buffer *eb,
struct btrfs_inode_item *ii) struct btrfs_inode_item *ii)
{ {