Currently c/o/s/r time of ROOT_ITEM is not printed in print_root_item().
Fix this and print them if the values are not zero. print_timespec()
is moved forward to reuse.

Signed-off-by: Tomohiro Misono <misono.tomoh...@jp.fujitsu.com>
---
 ctree.h      | 32 ++++++++++++++++++++++++++++++++
 print-tree.c | 52 ++++++++++++++++++++++++++++++++--------------------
 2 files changed, 64 insertions(+), 20 deletions(-)

diff --git a/ctree.h b/ctree.h
index 2280659..54a85fd 100644
--- a/ctree.h
+++ b/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,
                         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 */
 BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup,
                   tree_root, 64);
diff --git a/print-tree.c b/print-tree.c
index 9d1b862..62f3163 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -551,6 +551,26 @@ static void root_flags_to_str(u64 flags, char *ret)
                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)
 {
        struct btrfs_root_item *ri;
@@ -600,6 +620,18 @@ static void print_root_item(struct extent_buffer *leaf, 
int slot)
                                btrfs_root_stransid(&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);
@@ -858,26 +890,6 @@ static void inode_flags_to_str(u64 flags, char *ret)
                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,
                struct btrfs_inode_item *ii)
 {
-- 
2.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to