]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cachefiles: add tracepoints for on-demand read mode
authorJeffle Xu <jefflexu@linux.alibaba.com>
Mon, 25 Apr 2022 12:21:29 +0000 (20:21 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Tue, 17 May 2022 16:11:18 +0000 (00:11 +0800)
Add tracepoints for on-demand read mode. Currently following tracepoints
are added:

OPEN request / COPEN reply
CLOSE request
READ request / CREAD reply
write through anonymous fd
release of anonymous fd

Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
Acked-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20220425122143.56815-8-jefflexu@linux.alibaba.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/cachefiles/ondemand.c
include/trace/events/cachefiles.h

index 3470d4e8f0cb0db5eaa0d71da24130c9cb02530e..a41ae6efc5454523f1e4775fa748da89c206dede 100644 (file)
@@ -30,6 +30,7 @@ static int cachefiles_ondemand_fd_release(struct inode *inode,
        xa_unlock(&cache->reqs);
 
        xa_erase(&cache->ondemand_ids, object_id);
+       trace_cachefiles_ondemand_fd_release(object, object_id);
        cachefiles_put_object(object, cachefiles_obj_put_ondemand_fd);
        cachefiles_put_unbind_pincount(cache);
        return 0;
@@ -55,6 +56,7 @@ static ssize_t cachefiles_ondemand_fd_write_iter(struct kiocb *kiocb,
        if (ret < 0)
                return ret;
 
+       trace_cachefiles_ondemand_fd_write(object, file_inode(file), pos, len);
        ret = __cachefiles_write(object, file, pos, iter, NULL, NULL);
        if (!ret)
                ret = len;
@@ -93,6 +95,7 @@ static long cachefiles_ondemand_fd_ioctl(struct file *filp, unsigned int ioctl,
        if (!req)
                return -EINVAL;
 
+       trace_cachefiles_ondemand_cread(object, id);
        complete(&req->done);
        return 0;
 }
@@ -166,6 +169,7 @@ int cachefiles_ondemand_copen(struct cachefiles_cache *cache, char *args)
                clear_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags);
        else
                set_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags);
+       trace_cachefiles_ondemand_copen(req->object, id, size);
 
 out:
        complete(&req->done);
@@ -213,6 +217,7 @@ static int cachefiles_ondemand_get_fd(struct cachefiles_req *req)
        object->ondemand_id = object_id;
 
        cachefiles_get_unbind_pincount(cache);
+       trace_cachefiles_ondemand_open(object, &req->msg, load);
        return 0;
 
 err_put_fd:
@@ -426,6 +431,7 @@ static int cachefiles_ondemand_init_close_req(struct cachefiles_req *req,
                return -ENOENT;
 
        req->msg.object_id = object_id;
+       trace_cachefiles_ondemand_close(object, &req->msg);
        return 0;
 }
 
@@ -452,6 +458,7 @@ static int cachefiles_ondemand_init_read_req(struct cachefiles_req *req,
        req->msg.object_id = object_id;
        load->off = read_ctx->off;
        load->len = read_ctx->len;
+       trace_cachefiles_ondemand_read(object, &req->msg, load);
        return 0;
 }
 
index 93df9391bd7fc531e881d7cf2b7d119c8d81c53b..d8d4d73fe7b6ad8c61b2df616eb18e69241a3338 100644 (file)
@@ -673,6 +673,180 @@ TRACE_EVENT(cachefiles_io_error,
                      __entry->error)
            );
 
+TRACE_EVENT(cachefiles_ondemand_open,
+           TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
+                    struct cachefiles_open *load),
+
+           TP_ARGS(obj, msg, load),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj             )
+                   __field(unsigned int,       msg_id          )
+                   __field(unsigned int,       object_id       )
+                   __field(unsigned int,       fd              )
+                   __field(unsigned int,       flags           )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->msg_id     = msg->msg_id;
+                   __entry->object_id  = msg->object_id;
+                   __entry->fd         = load->fd;
+                   __entry->flags      = load->flags;
+                          ),
+
+           TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
+                     __entry->obj,
+                     __entry->msg_id,
+                     __entry->object_id,
+                     __entry->fd,
+                     __entry->flags)
+           );
+
+TRACE_EVENT(cachefiles_ondemand_copen,
+           TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
+                    long len),
+
+           TP_ARGS(obj, msg_id, len),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj     )
+                   __field(unsigned int,       msg_id  )
+                   __field(long,               len     )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->msg_id     = msg_id;
+                   __entry->len        = len;
+                          ),
+
+           TP_printk("o=%08x mid=%x l=%lx",
+                     __entry->obj,
+                     __entry->msg_id,
+                     __entry->len)
+           );
+
+TRACE_EVENT(cachefiles_ondemand_close,
+           TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),
+
+           TP_ARGS(obj, msg),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj             )
+                   __field(unsigned int,       msg_id          )
+                   __field(unsigned int,       object_id       )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->msg_id     = msg->msg_id;
+                   __entry->object_id  = msg->object_id;
+                          ),
+
+           TP_printk("o=%08x mid=%x oid=%x",
+                     __entry->obj,
+                     __entry->msg_id,
+                     __entry->object_id)
+           );
+
+TRACE_EVENT(cachefiles_ondemand_read,
+           TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
+                    struct cachefiles_read *load),
+
+           TP_ARGS(obj, msg, load),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj             )
+                   __field(unsigned int,       msg_id          )
+                   __field(unsigned int,       object_id       )
+                   __field(loff_t,             start           )
+                   __field(size_t,             len             )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->msg_id     = msg->msg_id;
+                   __entry->object_id  = msg->object_id;
+                   __entry->start      = load->off;
+                   __entry->len        = load->len;
+                          ),
+
+           TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
+                     __entry->obj,
+                     __entry->msg_id,
+                     __entry->object_id,
+                     __entry->start,
+                     __entry->len)
+           );
+
+TRACE_EVENT(cachefiles_ondemand_cread,
+           TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),
+
+           TP_ARGS(obj, msg_id),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj     )
+                   __field(unsigned int,       msg_id  )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->msg_id     = msg_id;
+                          ),
+
+           TP_printk("o=%08x mid=%x",
+                     __entry->obj,
+                     __entry->msg_id)
+           );
+
+TRACE_EVENT(cachefiles_ondemand_fd_write,
+           TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
+                    loff_t start, size_t len),
+
+           TP_ARGS(obj, backer, start, len),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj     )
+                   __field(unsigned int,       backer  )
+                   __field(loff_t,             start   )
+                   __field(size_t,             len     )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->backer     = backer->i_ino;
+                   __entry->start      = start;
+                   __entry->len        = len;
+                          ),
+
+           TP_printk("o=%08x iB=%x s=%llx l=%zx",
+                     __entry->obj,
+                     __entry->backer,
+                     __entry->start,
+                     __entry->len)
+           );
+
+TRACE_EVENT(cachefiles_ondemand_fd_release,
+           TP_PROTO(struct cachefiles_object *obj, int object_id),
+
+           TP_ARGS(obj, object_id),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       obj             )
+                   __field(unsigned int,       object_id       )
+                            ),
+
+           TP_fast_assign(
+                   __entry->obj        = obj ? obj->debug_id : 0;
+                   __entry->object_id  = object_id;
+                          ),
+
+           TP_printk("o=%08x oid=%x",
+                     __entry->obj,
+                     __entry->object_id)
+           );
+
 #endif /* _TRACE_CACHEFILES_H */
 
 /* This part must be outside protection */