aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/fuse_lowlevel.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 17bc816..a5d9e0c 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -17,6 +17,7 @@
#include "fuse_opt.h"
#include "fuse_misc.h"
#include "mount_util.h"
+#include "usdt.h"
#include "util.h"
#include <stdint.h>
@@ -60,6 +61,23 @@ static __attribute__((constructor)) void fuse_ll_init_pagesize(void)
pagesize = getpagesize();
}
+/* tracepoints */
+static void trace_request_receive(int err)
+{
+ USDT(libfuse, request_receive, err);
+}
+
+static void trace_request_process(unsigned int opcode, unsigned int unique)
+{
+ USDT(libfuse, request_process, opcode, unique);
+}
+
+static void trace_request_reply(uint64_t unique, unsigned int len,
+ int error, int reply_err)
+{
+ USDT(libfuse, request_reply, unique, len, error, reply_err);
+}
+
static void convert_stat(const struct stat *stbuf, struct fuse_attr *attr)
{
attr->ino = stbuf->st_ino;
@@ -207,6 +225,7 @@ static int fuse_send_msg(struct fuse_session *se, struct fuse_chan *ch,
res = writev(ch ? ch->fd : se->fd, iov, count);
int err = errno;
+ trace_request_reply(out->unique, out->len, out->error, err);
if (res == -1) {
/* ENOENT means the operation was interrupted */
@@ -2809,6 +2828,8 @@ void fuse_session_process_buf_internal(struct fuse_session *se,
in = buf->mem;
}
+ trace_request_process(in->opcode, in->unique);
+
if (se->debug) {
fuse_log(FUSE_LOG_DEBUG,
"unique: %llu, opcode: %s (%i), nodeid: %llu, insize: %zu, pid: %u\n",
@@ -3067,6 +3088,7 @@ pipe_retry:
bufsize, 0);
}
err = errno;
+ trace_request_receive(err);
if (fuse_session_exited(se))
return 0;
@@ -3171,6 +3193,7 @@ restart:
res = read(ch ? ch->fd : se->fd, buf->mem, bufsize);
}
err = errno;
+ trace_request_receive(err);
if (fuse_session_exited(se))
return 0;