f2fs: support to trace f2fs_bmap()
authorChao Yu <yuchao0@huawei.com>
Mon, 29 Jun 2020 12:13:12 +0000 (20:13 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 8 Jul 2020 04:51:46 +0000 (21:51 -0700)
to show f2fs_bmap()'s result as below:

f2fs_bmap: dev = (251,0), ino = 7, lblock:0, pblock:396800

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c
include/trace/events/f2fs.h

index 91dc7b598961470d3402d0ac509f9ae72e6c8629..c07a50e4d967ab84f80a8f3cda79e8728ccfee4e 100644 (file)
@@ -3713,18 +3713,26 @@ static sector_t f2fs_bmap_compress(struct inode *inode, sector_t block)
 static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
 {
        struct inode *inode = mapping->host;
+       struct buffer_head tmp = {
+               .b_size = i_blocksize(inode),
+       };
+       sector_t blknr = 0;
 
        if (f2fs_has_inline_data(inode))
-               return 0;
+               goto out;
 
        /* make sure allocating whole blocks */
        if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
                filemap_write_and_wait(mapping);
 
        if (f2fs_compressed_file(inode))
-               return f2fs_bmap_compress(inode, block);
+               blknr = f2fs_bmap_compress(inode, block);
 
-       return generic_block_bmap(mapping, block, get_data_block_bmap);
+       if (!get_data_block_bmap(inode, block, &tmp, 0))
+               blknr = tmp.b_blocknr;
+out:
+       trace_f2fs_bmap(inode, block, blknr);
+       return blknr;
 }
 
 #ifdef CONFIG_MIGRATION
index 8639ab962a713e9c7f185c70d943dd0a276e860e..2e8713a52d7635ff4047f318eedd8384d8e3ff6d 100644 (file)
@@ -1891,6 +1891,32 @@ TRACE_EVENT(f2fs_iostat,
                __entry->fs_cdrio, __entry->fs_nrio, __entry->fs_mrio)
 );
 
+TRACE_EVENT(f2fs_bmap,
+
+       TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock),
+
+       TP_ARGS(inode, lblock, pblock),
+
+       TP_STRUCT__entry(
+               __field(dev_t, dev)
+               __field(ino_t, ino)
+               __field(sector_t, lblock)
+               __field(sector_t, pblock)
+       ),
+
+       TP_fast_assign(
+               __entry->dev            = inode->i_sb->s_dev;
+               __entry->ino            = inode->i_ino;
+               __entry->lblock         = lblock;
+               __entry->pblock         = pblock;
+       ),
+
+       TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld",
+               show_dev_ino(__entry),
+               (unsigned long long)__entry->lblock,
+               (unsigned long long)__entry->pblock)
+);
+
 #endif /* _TRACE_F2FS_H */
 
  /* This part must be outside protection */