Re: [PATCH] btrfs-progs: ins: print c/o/s/r time of ROOT_ITEM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux