forked from Minki/linux
cachefiles: add tracepoints for on-demand read mode
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>
This commit is contained in:
parent
4e4f1788af
commit
1519670e4f
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user