[Virtio-fs] [PATCH v2 3/3] virtio-fs: add tracepoints
Masayoshi Mizuma
msys.mizuma at gmail.com
Wed Aug 21 04:40:14 UTC 2019
From: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
Add tracepoint to the following function. It will be useful
to debug the I/O request flow.
- virtio_fs_enqueue_req
- virtio_fs_requests_done_work
- virtio_fs_hiprio_dispatch_work
- virtio_fs_hiprio_done_work
Example of the trace record:
cat-4491 [006] .... 72.414799: virtio_fs_request_dispatched:
opcode FUSE_READ unique 0x13b30 nodeid 0x2 in.len 80 flags
ISREPLY|WAITING|SENT notify 1
kworker/0:12-448 [000] .... 72.414807: virtio_fs_request_done:
opcode FUSE_READ unique 0x13b30 nodeid 0x2 in.len 80 flags
ISREPLY|WAITING
Signed-off-by: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
---
fs/fuse/virtio_fs.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c
index 558d090af..83055d22a 100644
--- a/fs/fuse/virtio_fs.c
+++ b/fs/fuse/virtio_fs.c
@@ -14,6 +14,9 @@
#include <linux/delay.h>
#include "fuse_i.h"
+#define CREATE_TRACE_POINTS
+#include <trace/events/virtio_fs.h>
+
/* List of virtio-fs device instances and a lock for the list */
static DEFINE_MUTEX(virtio_fs_mutex);
static LIST_HEAD(virtio_fs_instances);
@@ -175,6 +178,7 @@ static void virtio_fs_hiprio_done_work(struct work_struct *work)
struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq,
done_work);
struct virtqueue *vq = fsvq->vq;
+ struct virtio_fs_forget *forget;
/* Free completed FUSE_FORGET requests */
spin_lock(&fsvq->lock);
@@ -185,6 +189,10 @@ static void virtio_fs_hiprio_done_work(struct work_struct *work)
virtqueue_disable_cb(vq);
while ((req = virtqueue_get_buf(vq, &len)) != NULL) {
+ forget = (struct virtio_fs_forget *)req;
+ trace_virtio_fs_hiprio_request_done(
+ forget->ih.opcode, forget->ih.unique,
+ forget->ih.nodeid, forget->ih.len);
kfree(req);
fsvq->in_flight--;
}
@@ -249,6 +257,12 @@ static void virtio_fs_hiprio_dispatch_work(struct work_struct *work)
fsvq->in_flight++;
notify = virtqueue_kick_prepare(vq);
+
+ trace_virtio_fs_hiprio_request_dispatched(
+ forget->ih.opcode, forget->ih.unique,
+ forget->ih.nodeid, forget->ih.len,
+ notify);
+
spin_unlock(&fsvq->lock);
if (notify)
@@ -362,6 +376,11 @@ static void virtio_fs_requests_done_work(struct work_struct *work)
spin_lock(&fpq->lock);
clear_bit(FR_SENT, &req->flags);
list_del_init(&req->list);
+
+ trace_virtio_fs_request_done(
+ req->in.h.opcode, req->in.h.unique,
+ req->in.h.nodeid, req->in.h.len, req->flags);
+
spin_unlock(&fpq->lock);
fuse_request_end(fc, req);
@@ -912,6 +931,10 @@ static int virtio_fs_enqueue_req(struct virtqueue *vq, struct fuse_req *req)
notify = virtqueue_kick_prepare(vq);
+ trace_virtio_fs_request_dispatched(
+ req->in.h.opcode, req->in.h.unique,
+ req->in.h.nodeid, req->in.h.len, req->flags, notify);
+
spin_unlock(&fsvq->lock);
if (notify)
--
2.18.1
More information about the Virtio-fs
mailing list