[PREVIEW] [PATCH] staging: erofs: add trace points for reading zipped data

Gao Xiang gaoxiang25 at huawei.com
Fri Aug 17 15:59:07 AEST 2018


Hi Chen,

On 2018/8/16 19:33, Chen Gong wrote:
> This patch adds trace points for reading zipped data.
> 
> Signed-off-by: Chen Gong <gongchen4 at huawei.com>
> ---
>  drivers/staging/erofs/include/trace/events/erofs.h | 20 ++++++++++++++++++--
>  drivers/staging/erofs/unzip_vle.c                  | 10 ++++++++++
>  2 files changed, 28 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/erofs/include/trace/events/erofs.h b/drivers/staging/erofs/include/trace/events/erofs.h
> index 5aead93..53045de 100644
> --- a/drivers/staging/erofs/include/trace/events/erofs.h
> +++ b/drivers/staging/erofs/include/trace/events/erofs.h
> @@ -162,7 +162,8 @@
>  
>  	TP_printk("dev = (%d,%d), nid = %llu, la %llu llen %llu flags %s",
>  		  show_dev_nid(__entry),
> -		  __entry->la, __entry->llen, show_map_flags(__entry->flags))
> +		  __entry->la, __entry->llen,
> +		  __entry->flags ? show_map_flags(__entry->flags) : "Z")

I personally tend to use
__entry->flags ? show_map_flags(__entry->flags) : "(default)"
or
__entry->flags ? show_map_flags(__entry->flags) : "(null)"
here, since no flag doesn't only mean ZIPPED or something else.

>  );
>  
>  DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_flatmode_enter,
> @@ -172,6 +173,13 @@
>  	TP_ARGS(inode, map, flags)
>  );
>  
> +DEFINE_EVENT(erofs__map_blocks_enter, z_erofs_map_blocks_iter_enter,
> +	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
> +		 unsigned flags),
> +
> +	TP_ARGS(inode, map, flags)
> +);
> +
>  DECLARE_EVENT_CLASS(erofs__map_blocks_exit,
>  	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
>  		 unsigned int flags, int ret),
> @@ -204,7 +212,8 @@
>  
>  	TP_printk("dev = (%d,%d), nid = %llu, flags %s "
>  		  "la %llu pa %llu llen %llu plen %llu mflags %s ret %d",
> -		  show_dev_nid(__entry), show_map_flags(__entry->flags),
> +		  show_dev_nid(__entry),
> +		  __entry->flags ? show_map_flags(__entry->flags) : "Z",

ditto.

Thanks,
Gao Xiang

>  		  __entry->la, __entry->pa, __entry->llen, __entry->plen,
>  		  show_mflags(__entry->mflags), __entry->ret)
>  );
> @@ -216,6 +225,13 @@
>  	TP_ARGS(inode, map, flags, ret)
>  );
>  
> +DEFINE_EVENT(erofs__map_blocks_exit, z_erofs_map_blocks_iter_exit,
> +	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
> +		 unsigned flags, int ret),
> +
> +	TP_ARGS(inode, map, flags, ret)
> +);
> +
>  TRACE_EVENT(erofs_destroy_inode,
>  	TP_PROTO(struct inode *inode),
>  
> diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
> index 6e5c24d..3a87eee 100644
> --- a/drivers/staging/erofs/unzip_vle.c
> +++ b/drivers/staging/erofs/unzip_vle.c
> @@ -13,6 +13,8 @@
>  #include "unzip_vle.h"
>  #include <linux/prefetch.h>
>  
> +#include <trace/events/erofs.h>
> +
>  static struct workqueue_struct *z_erofs_workqueue __read_mostly;
>  static struct kmem_cache *z_erofs_workgroup_cachep __read_mostly;
>  
> @@ -613,6 +615,8 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  	unsigned cur, end, spiltted, index;
>  	int err = 0;
>  
> +	trace_erofs_readpage(page, false);
> +
>  	/* register locked file pages as online pages in pack */
>  	z_erofs_onlinepage_init(page);
>  
> @@ -1347,6 +1351,8 @@ static inline int __z_erofs_vle_normalaccess_readpages(
>  	struct page *head = NULL;
>  	LIST_HEAD(pagepool);
>  
> +	trace_erofs_readpages(mapping->host, lru_to_page(pages), nr_pages, false);
> +
>  #if (EROFS_FS_ZIP_CACHE_LVL >= 2)
>  	f.cachedzone_la = lru_to_page(pages)->index << PAGE_SHIFT;
>  #endif
> @@ -1569,6 +1575,8 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  	unsigned int cluster_type, logical_cluster_ofs;
>  	int err = 0;
>  
> +	trace_z_erofs_map_blocks_iter_enter(inode, map, flags);
> +
>  	/* when trying to read beyond EOF, leave it unmapped */
>  	if (unlikely(map->m_la >= inode->i_size)) {
>  		DBG_BUGON(!initial);
> @@ -1687,6 +1695,8 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  		__func__, map->m_la, map->m_pa,
>  		map->m_llen, map->m_plen, map->m_flags);
>  
> +	trace_z_erofs_map_blocks_iter_exit(inode, map, flags, err);
> +
>  	/* aggressively BUG_ON iff CONFIG_EROFS_FS_DEBUG is on */
>  	DBG_BUGON(err < 0 && err != -ENOMEM);
>  	return err;
> 


More information about the Linux-erofs mailing list