From: Youling Tang <[email protected]>

Add trace_bch2_sync_fs() and trace_bch2_fsync() implementations.

The output in trace is as follows:
  sync-29779   [000] .....   193.700935: bch2_sync_fs: dev 254,16 wait 1
  <...>-40027  [002] .....   342.535227: bch2_fsync: dev 254,32 ino 4099 parent 
4096 datasync 1

Signed-off-by: Youling Tang <[email protected]>
---
 fs/bcachefs/fs-io.c |  2 ++
 fs/bcachefs/fs.c    |  3 +++
 fs/bcachefs/trace.h | 50 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 55 insertions(+)

diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c
index f5b266e51261..e89f01394ccb 100644
--- a/fs/bcachefs/fs-io.c
+++ b/fs/bcachefs/fs-io.c
@@ -194,6 +194,8 @@ int bch2_fsync(struct file *file, loff_t start, loff_t end, 
int datasync)
        struct bch_fs *c = inode->v.i_sb->s_fs_info;
        int ret, err;
 
+       trace_bch2_fsync(file, datasync);
+
        ret = file_write_and_wait_range(file, start, end);
        if (ret)
                goto out;
diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c
index 9b52ac233bf9..0695f478e206 100644
--- a/fs/bcachefs/fs.c
+++ b/fs/bcachefs/fs.c
@@ -26,6 +26,7 @@
 #include "snapshot.h"
 #include "super.h"
 #include "xattr.h"
+#include "trace.h"
 
 #include <linux/aio.h>
 #include <linux/backing-dev.h>
@@ -1681,6 +1682,8 @@ static int bch2_sync_fs(struct super_block *sb, int wait)
        struct bch_fs *c = sb->s_fs_info;
        int ret;
 
+       trace_bch2_sync_fs(sb, wait);
+
        if (c->opts.journal_flush_disabled)
                return 0;
 
diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h
index 362e1fc7ef6a..564e115f4d2e 100644
--- a/fs/bcachefs/trace.h
+++ b/fs/bcachefs/trace.h
@@ -200,6 +200,56 @@ DECLARE_EVENT_CLASS(bio,
                  (unsigned long long)__entry->sector, __entry->nr_sector)
 );
 
+/* fs.c: */
+TRACE_EVENT(bch2_sync_fs,
+       TP_PROTO(struct super_block *sb, int wait),
+
+       TP_ARGS(sb, wait),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field(        int,    wait                    )
+
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = sb->s_dev;
+               __entry->wait   = wait;
+       ),
+
+       TP_printk("dev %d,%d wait %d",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __entry->wait)
+);
+
+/* fs-io.c: */
+TRACE_EVENT(bch2_fsync,
+       TP_PROTO(struct file *file, int datasync),
+
+       TP_ARGS(file, datasync),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field(        ino_t,  ino                     )
+               __field(        ino_t,  parent                  )
+               __field(        int,    datasync                )
+       ),
+
+       TP_fast_assign(
+               struct dentry *dentry = file->f_path.dentry;
+
+               __entry->dev            = dentry->d_sb->s_dev;
+               __entry->ino            = d_inode(dentry)->i_ino;
+               __entry->parent         = d_inode(dentry->d_parent)->i_ino;
+               __entry->datasync       = datasync;
+       ),
+
+       TP_printk("dev %d,%d ino %lu parent %lu datasync %d ",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 (unsigned long) __entry->ino,
+                 (unsigned long) __entry->parent, __entry->datasync)
+);
+
 /* super-io.c: */
 TRACE_EVENT(write_super,
        TP_PROTO(struct bch_fs *c, unsigned long ip),
-- 
2.34.1


Reply via email to