Commit 1519670e authored by Jeffle Xu's avatar Jeffle Xu Committed by Gao Xiang
Browse files

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: default avatarJeffle Xu <jefflexu@linux.alibaba.com>
Acked-by: default avatarDavid Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20220425122143.56815-8-jefflexu@linux.alibaba.com


Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
parent 4e4f1788
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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;
}

+174 −0
Original line number Diff line number Diff line
@@ -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 */