diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 7e9bf358f015..63a289853023 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -1633,6 +1633,7 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file, list_move_tail(&req->list, &fpq->processing[hash]); __fuse_get_request(req); set_bit(FR_SENT, &req->flags); + trace_fuse_request_sent(req); spin_unlock(&fpq->lock); /* matches barrier in request_wait_answer() */ smp_mb__after_atomic(); diff --git a/fs/fuse/dev_uring.c b/fs/fuse/dev_uring.c index 2901c7a5ff05..87f5f9eba534 100644 --- a/fs/fuse/dev_uring.c +++ b/fs/fuse/dev_uring.c @@ -711,6 +711,7 @@ static int fuse_uring_prepare_send(struct fuse_ring_ent *ent, err = fuse_uring_copy_to_ring(ent, req); if (!err) { set_bit(FR_SENT, &req->flags); + trace_fuse_request_sent(req); } else { /* * Copying the request failed. Remove the entry from the diff --git a/fs/fuse/fuse_trace.h b/fs/fuse/fuse_trace.h index 4e34ddb172ed..60baa10bbcb9 100644 --- a/fs/fuse/fuse_trace.h +++ b/fs/fuse/fuse_trace.h @@ -101,6 +101,28 @@ TRACE_EVENT(fuse_request_send, __print_symbolic(__entry->opcode, OPCODES), __entry->len) ); +TRACE_EVENT(fuse_request_sent, + TP_PROTO(const struct fuse_req *req), + + TP_ARGS(req), + + TP_STRUCT__entry( + __field(dev_t, connection) + __field(uint64_t, unique) + __field(enum fuse_opcode, opcode) + ), + + TP_fast_assign( + __entry->connection = req->chan->conn->dev; + __entry->unique = req->in.h.unique; + __entry->opcode = req->in.h.opcode; + ), + + TP_printk("connection %u req %llu opcode %u (%s)", + __entry->connection, __entry->unique, __entry->opcode, + __print_symbolic(__entry->opcode, OPCODES)) +); + TRACE_EVENT(fuse_request_end, TP_PROTO(const struct fuse_req *req),