On 2017年10月31日 13:40, Misono, Tomohiro wrote:
> 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>

Reviewed-by: Qu Wenruo <w...@suse.com>

Thanks,
Qu

> ---
>  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)
>  {
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to