Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp383696imm; Thu, 26 Jul 2018 05:27:12 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcFa1WKTqThvFZ41Jh4yO9jBmzxdb7G7VREN24TpO9G8Hs9LlpgF7VQPC13s8zagVN0N6c8 X-Received: by 2002:a63:231a:: with SMTP id j26-v6mr1759170pgj.138.1532608032500; Thu, 26 Jul 2018 05:27:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532608032; cv=none; d=google.com; s=arc-20160816; b=hq3bkAxJlxKeIS5lo84OaMRI/bDa0lu1R2kAdD0154hxRjROItngY3ks10T2KbwIsa xV2DRErTUdBX9AHuvwLi584MB8RE6GZqIooqJLH41hd+vqCPOAzk/h5SWmgYhcqFddby t5yrY+DnzAsuy9gW6P3TinTPGPe+sdBRdTqi+da7B4oLOxtbTxq8gWU4nLcewfHiQcV5 bfVZshDax5BS3KvqrYgTsK+TBGU0kNSK0fufNnmgHGGYpPKc6zmm1ZHOQswW2K1mDK5L Qp13Hw4O2qsxZzor8CrZSrXvp6RIcDxH7zJyM5SNG7E7ZWXgETCkT4Nx6ax6/ij/Is4V 8GnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=94LHO3qOWoPxKgiaLvMLRDamfqkcuzIJRDQakD8HZAo=; b=cEa4FCr4s3npL8Q3HVhn1MZyIW/sWW48XZokQjH6N2NNqKH4DEHyTYb4lrlUOXn5Zr /DVt/pOTKc/o0Euu3WOaVqpmYWXjN+KuxDulSCeQANk7t2JWY0JSmXfRYb+J1SRdQ2xq +qrt/zAQV5yQJQM5/vr+eLMhb9E2Yr9f9xVO57vArGed2T0+mcN1c3vRzJkfEHydXILY Svoh9PbctmXKXNG82LfQXqYv8Zn5GwthE+0kNgmTTqJCSvTGIVrpu8qa1oFdiJ+mzz5n GFbT2nacOgAJSMXUcDvHa15BFMKHLGGGEQyxdDw3saZQhf33gfiyMlD+L0de5zHnv8/g iyxA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a1-v6si1132474pli.472.2018.07.26.05.26.57; Thu, 26 Jul 2018 05:27:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731233AbeGZNml (ORCPT + 99 others); Thu, 26 Jul 2018 09:42:41 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:33075 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730323AbeGZNml (ORCPT ); Thu, 26 Jul 2018 09:42:41 -0400 Received: from DGGEMS408-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id E2F3BFB3905F9; Thu, 26 Jul 2018 20:26:01 +0800 (CST) Received: from szvp000100637.huawei.com (10.162.55.131) by smtp.huawei.com (10.3.19.208) with Microsoft SMTP Server (TLS) id 14.3.382.0; Thu, 26 Jul 2018 20:25:53 +0800 From: Gao Xiang To: Greg Kroah-Hartman , CC: , , , , , , , Subject: [PATCH 12/25] staging: erofs: support tracepoint Date: Thu, 26 Jul 2018 20:21:55 +0800 Message-ID: <1532607728-103372-13-git-send-email-gaoxiang25@huawei.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1532607728-103372-1-git-send-email-gaoxiang25@huawei.com> References: <1527764767-22190-1-git-send-email-gaoxiang25@huawei.com> <1532607728-103372-1-git-send-email-gaoxiang25@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.162.55.131] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chao Yu Add basic tracepoints for ->readpage{,s}, ->lookup, ->destroy_inode, fill_inode and map_blocks. Reviewed-by: Gao Xiang Signed-off-by: Chao Yu --- drivers/staging/erofs/data.c | 13 +- drivers/staging/erofs/include/trace/events/erofs.h | 240 +++++++++++++++++++++ drivers/staging/erofs/inode.c | 4 + drivers/staging/erofs/namei.c | 4 + drivers/staging/erofs/super.c | 3 + 5 files changed, 261 insertions(+), 3 deletions(-) create mode 100644 drivers/staging/erofs/include/trace/events/erofs.h diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c index 4ddb5c0..47d1787 100644 --- a/drivers/staging/erofs/data.c +++ b/drivers/staging/erofs/data.c @@ -13,6 +13,8 @@ #include "internal.h" #include +#include + static inline void read_endio(struct bio *bio) { int i; @@ -113,6 +115,7 @@ static int erofs_map_blocks_flatmode(struct inode *inode, u64 offset = map->m_la; struct erofs_vnode *vi = EROFS_V(inode); + trace_erofs_map_blocks_flatmode_enter(inode, map, flags); BUG_ON(is_inode_layout_compression(inode)); nblocks = DIV_ROUND_UP(inode->i_size, PAGE_SIZE); @@ -150,8 +153,7 @@ static int erofs_map_blocks_flatmode(struct inode *inode, out: map->m_llen = map->m_plen; - debugln("%s, m_la 0x%llx m_pa %llx m_len %llu", - __func__, map->m_la, map->m_pa, map->m_plen); + trace_erofs_map_blocks_flatmode_exit(inode, map, flags, 0); return 0; } @@ -305,6 +307,8 @@ static int erofs_raw_access_readpage(struct file *file, struct page *page) erofs_off_t last_block; struct bio *bio; + trace_erofs_readpage(page, true); + bio = erofs_read_raw_page(NULL, page->mapping, page, &last_block, 1, false); @@ -322,9 +326,12 @@ static int erofs_raw_access_readpages(struct file *filp, erofs_off_t last_block; struct bio *bio = NULL; gfp_t gfp = readahead_gfp_mask(mapping); + struct page *page = list_last_entry(pages, struct page, lru); + + trace_erofs_readpages(mapping->host, page, nr_pages, true); for (; nr_pages; --nr_pages) { - struct page *page = list_entry(pages->prev, struct page, lru); + page = list_entry(pages->prev, struct page, lru); prefetchw(&page->flags); list_del(&page->lru); diff --git a/drivers/staging/erofs/include/trace/events/erofs.h b/drivers/staging/erofs/include/trace/events/erofs.h new file mode 100644 index 0000000..5aead93 --- /dev/null +++ b/drivers/staging/erofs/include/trace/events/erofs.h @@ -0,0 +1,240 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM erofs + +#if !defined(_TRACE_EROFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_EROFS_H + +#include + +#define show_dev(dev) MAJOR(dev), MINOR(dev) +#define show_dev_nid(entry) show_dev(entry->dev), entry->nid + +#define show_file_type(type) \ + __print_symbolic(type, \ + { 0, "FILE" }, \ + { 1, "DIR" }) + +#define show_map_flags(flags) __print_flags(flags, "|", \ + { EROFS_GET_BLOCKS_RAW, "RAW" }) + +#define show_mflags(flags) __print_flags(flags, "", \ + { EROFS_MAP_MAPPED, "M" }, \ + { EROFS_MAP_META, "I" }, \ + { EROFS_MAP_ZIPPED, "Z" }) + +TRACE_EVENT(erofs_lookup, + + TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags), + + TP_ARGS(dir, dentry, flags), + + TP_STRUCT__entry( + __field(dev_t, dev ) + __field(erofs_nid_t, nid ) + __field(const char *, name ) + __field(unsigned int, flags ) + ), + + TP_fast_assign( + __entry->dev = dir->i_sb->s_dev; + __entry->nid = EROFS_V(dir)->nid; + __entry->name = dentry->d_name.name; + __entry->flags = flags; + ), + + TP_printk("dev = (%d,%d), pnid = %llu, name:%s, flags:%x", + show_dev_nid(__entry), + __entry->name, + __entry->flags) +); + +TRACE_EVENT(erofs_fill_inode, + TP_PROTO(struct inode *inode, int isdir), + TP_ARGS(inode, isdir), + + TP_STRUCT__entry( + __field(dev_t, dev ) + __field(erofs_nid_t, nid ) + __field(erofs_blk_t, blkaddr ) + __field(unsigned int, ofs ) + __field(int, isdir ) + ), + + TP_fast_assign( + __entry->dev = inode->i_sb->s_dev; + __entry->nid = EROFS_V(inode)->nid; + __entry->blkaddr = erofs_blknr(iloc(EROFS_I_SB(inode), __entry->nid)); + __entry->ofs = erofs_blkoff(iloc(EROFS_I_SB(inode), __entry->nid)); + __entry->isdir = isdir; + ), + + TP_printk("dev = (%d,%d), nid = %llu, blkaddr %u ofs %u, isdir %d", + show_dev_nid(__entry), + __entry->blkaddr, __entry->ofs, + __entry->isdir) +); + +TRACE_EVENT(erofs_readpage, + + TP_PROTO(struct page *page, bool raw), + + TP_ARGS(page, raw), + + TP_STRUCT__entry( + __field(dev_t, dev ) + __field(erofs_nid_t, nid ) + __field(int, dir ) + __field(pgoff_t, index ) + __field(int, uptodate) + __field(bool, raw ) + ), + + TP_fast_assign( + __entry->dev = page->mapping->host->i_sb->s_dev; + __entry->nid = EROFS_V(page->mapping->host)->nid; + __entry->dir = S_ISDIR(page->mapping->host->i_mode); + __entry->index = page->index; + __entry->uptodate = PageUptodate(page); + __entry->raw = raw; + ), + + TP_printk("dev = (%d,%d), nid = %llu, %s, index = %lu, uptodate = %d " + "raw = %d", + show_dev_nid(__entry), + show_file_type(__entry->dir), + (unsigned long)__entry->index, + __entry->uptodate, + __entry->raw) +); + +TRACE_EVENT(erofs_readpages, + + TP_PROTO(struct inode *inode, struct page *page, unsigned int nrpage, + bool raw), + + TP_ARGS(inode, page, nrpage, raw), + + TP_STRUCT__entry( + __field(dev_t, dev ) + __field(erofs_nid_t, nid ) + __field(pgoff_t, start ) + __field(unsigned int, nrpage ) + __field(bool, raw ) + ), + + TP_fast_assign( + __entry->dev = inode->i_sb->s_dev; + __entry->nid = EROFS_V(inode)->nid; + __entry->start = page->index; + __entry->nrpage = nrpage; + __entry->raw = raw; + ), + + TP_printk("dev = (%d,%d), nid = %llu, start = %lu nrpage = %u raw = %d", + show_dev_nid(__entry), + (unsigned long)__entry->start, + __entry->nrpage, + __entry->raw) +); + +DECLARE_EVENT_CLASS(erofs__map_blocks_enter, + TP_PROTO(struct inode *inode, struct erofs_map_blocks *map, + unsigned int flags), + + TP_ARGS(inode, map, flags), + + TP_STRUCT__entry( + __field( dev_t, dev ) + __field( erofs_nid_t, nid ) + __field( erofs_off_t, la ) + __field( u64, llen ) + __field( unsigned int, flags ) + ), + + TP_fast_assign( + __entry->dev = inode->i_sb->s_dev; + __entry->nid = EROFS_V(inode)->nid; + __entry->la = map->m_la; + __entry->llen = map->m_llen; + __entry->flags = flags; + ), + + 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)) +); + +DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_flatmode_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), + + TP_ARGS(inode, map, flags, ret), + + TP_STRUCT__entry( + __field( dev_t, dev ) + __field( erofs_nid_t, nid ) + __field( unsigned int, flags ) + __field( erofs_off_t, la ) + __field( erofs_off_t, pa ) + __field( u64, llen ) + __field( u64, plen ) + __field( unsigned int, mflags ) + __field( int, ret ) + ), + + TP_fast_assign( + __entry->dev = inode->i_sb->s_dev; + __entry->nid = EROFS_V(inode)->nid; + __entry->flags = flags; + __entry->la = map->m_la; + __entry->pa = map->m_pa; + __entry->llen = map->m_llen; + __entry->plen = map->m_plen; + __entry->mflags = map->m_flags; + __entry->ret = ret; + ), + + 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), + __entry->la, __entry->pa, __entry->llen, __entry->plen, + show_mflags(__entry->mflags), __entry->ret) +); + +DEFINE_EVENT(erofs__map_blocks_exit, erofs_map_blocks_flatmode_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), + + TP_ARGS(inode), + + TP_STRUCT__entry( + __field( dev_t, dev ) + __field( erofs_nid_t, nid ) + ), + + TP_fast_assign( + __entry->dev = inode->i_sb->s_dev; + __entry->nid = EROFS_V(inode)->nid; + ), + + TP_printk("dev = (%d,%d), nid = %llu", show_dev_nid(__entry)) +); + +#endif /* _TRACE_EROFS_H */ + + /* This part must be outside protection */ +#include diff --git a/drivers/staging/erofs/inode.c b/drivers/staging/erofs/inode.c index a6d3e12..613c977 100644 --- a/drivers/staging/erofs/inode.c +++ b/drivers/staging/erofs/inode.c @@ -12,6 +12,8 @@ */ #include "xattr.h" +#include + /* no locking */ static int read_inode(struct inode *inode, void *data) { @@ -152,6 +154,8 @@ static int fill_inode(struct inode *inode, int isdir) erofs_blk_t blkaddr; unsigned ofs; + trace_erofs_fill_inode(inode, isdir); + blkaddr = erofs_blknr(iloc(sbi, vi->nid)); ofs = erofs_blkoff(iloc(sbi, vi->nid)); diff --git a/drivers/staging/erofs/namei.c b/drivers/staging/erofs/namei.c index 989876b..d2a0da3 100644 --- a/drivers/staging/erofs/namei.c +++ b/drivers/staging/erofs/namei.c @@ -13,6 +13,8 @@ #include "internal.h" #include "xattr.h" +#include + /* based on the value of qn->len is accurate */ static inline int dirnamecmp(struct qstr *qn, struct qstr *qd, unsigned *matched) @@ -209,6 +211,8 @@ static struct dentry *erofs_lookup(struct inode *dir, /* dentry must be unhashed in lookup, no need to worry about */ DBG_BUGON(!d_unhashed(dentry)); + trace_erofs_lookup(dir, dentry, flags); + /* file name exceeds fs limit */ if (unlikely(dentry->d_name.len > EROFS_NAME_LEN)) return ERR_PTR(-ENAMETOOLONG); diff --git a/drivers/staging/erofs/super.c b/drivers/staging/erofs/super.c index 701425f..054375d 100644 --- a/drivers/staging/erofs/super.c +++ b/drivers/staging/erofs/super.c @@ -17,6 +17,9 @@ #include #include "internal.h" +#define CREATE_TRACE_POINTS +#include + static struct kmem_cache *erofs_inode_cachep __read_mostly; static void init_once(void *ptr) -- 1.9.1