Message ID | 8bccc1fc-c8bb-9999-dbb7-94185ba5d7e8@jp.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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@jp.fujitsu.com> Reviewed-by: Qu Wenruo <wqu@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) > { >
On Tue, Oct 31, 2017 at 01:58:04PM +0800, Qu Wenruo wrote: > > > 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@jp.fujitsu.com> > > Reviewed-by: Qu Wenruo <wqu@suse.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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) {
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@jp.fujitsu.com> --- ctree.h | 32 ++++++++++++++++++++++++++++++++ print-tree.c | 52 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 64 insertions(+), 20 deletions(-)