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:
parent
89568f1bdf
commit
f23506c8a4
32
ctree.h
32
ctree.h
|
@ -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);
|
||||||
|
|
52
print-tree.c
52
print-tree.c
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue