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.tomohiro@xxxxxxxxxxxxxx>
Reviewed-by: Qu Wenruo <wqu@xxxxxxxx>
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
