mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	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
					
				
					 2 changed files with 181 additions and 0 deletions
				
			
		|  | @ -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…
	
	Add table
		
		Reference in a new issue
	
	 Jeffle Xu
						Jeffle Xu