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:
Jeffle Xu 2022-04-25 20:21:29 +08:00 committed by Gao Xiang
parent 4e4f1788af
commit 1519670e4f
2 changed files with 181 additions and 0 deletions

View 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;
}

View 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 */