diff options
Diffstat (limited to 'include/trace')
| -rw-r--r-- | include/trace/events/io_uring.h | 61 | ||||
| -rw-r--r-- | include/trace/events/pagemap.h | 46 | ||||
| -rw-r--r-- | include/trace/events/writeback.h | 28 | 
3 files changed, 97 insertions, 38 deletions
| diff --git a/include/trace/events/io_uring.h b/include/trace/events/io_uring.h index 0dd30de00e5b..7346f0164cf4 100644 --- a/include/trace/events/io_uring.h +++ b/include/trace/events/io_uring.h @@ -6,6 +6,7 @@  #define _TRACE_IO_URING_H  #include <linux/tracepoint.h> +#include <uapi/linux/io_uring.h>  struct io_wq_work; @@ -497,6 +498,66 @@ TRACE_EVENT(io_uring_task_run,  		  (unsigned long long) __entry->user_data)  ); +/* + * io_uring_req_failed - called when an sqe is errored dring submission + * + * @sqe:		pointer to the io_uring_sqe that failed + * @error:		error it failed with + * + * Allows easier diagnosing of malformed requests in production systems. + */ +TRACE_EVENT(io_uring_req_failed, + +	TP_PROTO(const struct io_uring_sqe *sqe, int error), + +	TP_ARGS(sqe, error), + +	TP_STRUCT__entry ( +		__field(  u8,	opcode ) +		__field(  u8,	flags ) +		__field(  u8,	ioprio ) +		__field( u64,	off ) +		__field( u64,	addr ) +		__field( u32,	len ) +		__field( u32,	op_flags ) +		__field( u64,	user_data ) +		__field( u16,	buf_index ) +		__field( u16,	personality ) +		__field( u32,	file_index ) +		__field( u64,	pad1 ) +		__field( u64,	pad2 ) +		__field( int,	error ) +	), + +	TP_fast_assign( +		__entry->opcode		= sqe->opcode; +		__entry->flags		= sqe->flags; +		__entry->ioprio		= sqe->ioprio; +		__entry->off		= sqe->off; +		__entry->addr		= sqe->addr; +		__entry->len		= sqe->len; +		__entry->op_flags	= sqe->rw_flags; +		__entry->user_data	= sqe->user_data; +		__entry->buf_index	= sqe->buf_index; +		__entry->personality	= sqe->personality; +		__entry->file_index	= sqe->file_index; +		__entry->pad1		= sqe->__pad2[0]; +		__entry->pad2		= sqe->__pad2[1]; +		__entry->error		= error; +	), + +	TP_printk("op %d, flags=0x%x, prio=%d, off=%llu, addr=%llu, " +		  "len=%u, rw_flags=0x%x, user_data=0x%llx, buf_index=%d, " +		  "personality=%d, file_index=%d, pad=0x%llx/%llx, error=%d", +		  __entry->opcode, __entry->flags, __entry->ioprio, +		  (unsigned long long)__entry->off, +		  (unsigned long long) __entry->addr, __entry->len, +		  __entry->op_flags, (unsigned long long) __entry->user_data, +		  __entry->buf_index, __entry->personality, __entry->file_index, +		  (unsigned long long) __entry->pad1, +		  (unsigned long long) __entry->pad2, __entry->error) +); +  #endif /* _TRACE_IO_URING_H */  /* This part must be outside protection */ diff --git a/include/trace/events/pagemap.h b/include/trace/events/pagemap.h index 1d28431e85bd..171524d3526d 100644 --- a/include/trace/events/pagemap.h +++ b/include/trace/events/pagemap.h @@ -16,38 +16,38 @@  #define PAGEMAP_MAPPEDDISK	0x0020u  #define PAGEMAP_BUFFERS		0x0040u -#define trace_pagemap_flags(page) ( \ -	(PageAnon(page)		? PAGEMAP_ANONYMOUS  : PAGEMAP_FILE) | \ -	(page_mapped(page)	? PAGEMAP_MAPPED     : 0) | \ -	(PageSwapCache(page)	? PAGEMAP_SWAPCACHE  : 0) | \ -	(PageSwapBacked(page)	? PAGEMAP_SWAPBACKED : 0) | \ -	(PageMappedToDisk(page)	? PAGEMAP_MAPPEDDISK : 0) | \ -	(page_has_private(page) ? PAGEMAP_BUFFERS    : 0) \ +#define trace_pagemap_flags(folio) ( \ +	(folio_test_anon(folio)		? PAGEMAP_ANONYMOUS  : PAGEMAP_FILE) | \ +	(folio_mapped(folio)		? PAGEMAP_MAPPED     : 0) | \ +	(folio_test_swapcache(folio)	? PAGEMAP_SWAPCACHE  : 0) | \ +	(folio_test_swapbacked(folio)	? PAGEMAP_SWAPBACKED : 0) | \ +	(folio_test_mappedtodisk(folio)	? PAGEMAP_MAPPEDDISK : 0) | \ +	(folio_test_private(folio)	? PAGEMAP_BUFFERS    : 0) \  	)  TRACE_EVENT(mm_lru_insertion, -	TP_PROTO(struct page *page), +	TP_PROTO(struct folio *folio), -	TP_ARGS(page), +	TP_ARGS(folio),  	TP_STRUCT__entry( -		__field(struct page *,	page	) +		__field(struct folio *,	folio	)  		__field(unsigned long,	pfn	)  		__field(enum lru_list,	lru	)  		__field(unsigned long,	flags	)  	),  	TP_fast_assign( -		__entry->page	= page; -		__entry->pfn	= page_to_pfn(page); -		__entry->lru	= page_lru(page); -		__entry->flags	= trace_pagemap_flags(page); +		__entry->folio	= folio; +		__entry->pfn	= folio_pfn(folio); +		__entry->lru	= folio_lru_list(folio); +		__entry->flags	= trace_pagemap_flags(folio);  	),  	/* Flag format is based on page-types.c formatting for pagemap */ -	TP_printk("page=%p pfn=0x%lx lru=%d flags=%s%s%s%s%s%s", -			__entry->page, +	TP_printk("folio=%p pfn=0x%lx lru=%d flags=%s%s%s%s%s%s", +			__entry->folio,  			__entry->pfn,  			__entry->lru,  			__entry->flags & PAGEMAP_MAPPED		? "M" : " ", @@ -60,23 +60,21 @@ TRACE_EVENT(mm_lru_insertion,  TRACE_EVENT(mm_lru_activate, -	TP_PROTO(struct page *page), +	TP_PROTO(struct folio *folio), -	TP_ARGS(page), +	TP_ARGS(folio),  	TP_STRUCT__entry( -		__field(struct page *,	page	) +		__field(struct folio *,	folio	)  		__field(unsigned long,	pfn	)  	),  	TP_fast_assign( -		__entry->page	= page; -		__entry->pfn	= page_to_pfn(page); +		__entry->folio	= folio; +		__entry->pfn	= folio_pfn(folio);  	), -	/* Flag format is based on page-types.c formatting for pagemap */ -	TP_printk("page=%p pfn=0x%lx", __entry->page, __entry->pfn) - +	TP_printk("folio=%p pfn=0x%lx", __entry->folio, __entry->pfn)  );  #endif /* _TRACE_PAGEMAP_H */ diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h index 840d1ba84cf5..7dccb66474f7 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h @@ -52,11 +52,11 @@ WB_WORK_REASON  struct wb_writeback_work; -DECLARE_EVENT_CLASS(writeback_page_template, +DECLARE_EVENT_CLASS(writeback_folio_template, -	TP_PROTO(struct page *page, struct address_space *mapping), +	TP_PROTO(struct folio *folio, struct address_space *mapping), -	TP_ARGS(page, mapping), +	TP_ARGS(folio, mapping),  	TP_STRUCT__entry (  		__array(char, name, 32) @@ -69,7 +69,7 @@ DECLARE_EVENT_CLASS(writeback_page_template,  			    bdi_dev_name(mapping ? inode_to_bdi(mapping->host) :  					 NULL), 32);  		__entry->ino = mapping ? mapping->host->i_ino : 0; -		__entry->index = page->index; +		__entry->index = folio->index;  	),  	TP_printk("bdi %s: ino=%lu index=%lu", @@ -79,18 +79,18 @@ DECLARE_EVENT_CLASS(writeback_page_template,  	)  ); -DEFINE_EVENT(writeback_page_template, writeback_dirty_page, +DEFINE_EVENT(writeback_folio_template, writeback_dirty_folio, -	TP_PROTO(struct page *page, struct address_space *mapping), +	TP_PROTO(struct folio *folio, struct address_space *mapping), -	TP_ARGS(page, mapping) +	TP_ARGS(folio, mapping)  ); -DEFINE_EVENT(writeback_page_template, wait_on_page_writeback, +DEFINE_EVENT(writeback_folio_template, folio_wait_writeback, -	TP_PROTO(struct page *page, struct address_space *mapping), +	TP_PROTO(struct folio *folio, struct address_space *mapping), -	TP_ARGS(page, mapping) +	TP_ARGS(folio, mapping)  );  DECLARE_EVENT_CLASS(writeback_dirty_inode_template, @@ -236,9 +236,9 @@ TRACE_EVENT(inode_switch_wbs,  TRACE_EVENT(track_foreign_dirty, -	TP_PROTO(struct page *page, struct bdi_writeback *wb), +	TP_PROTO(struct folio *folio, struct bdi_writeback *wb), -	TP_ARGS(page, wb), +	TP_ARGS(folio, wb),  	TP_STRUCT__entry(  		__array(char,		name, 32) @@ -250,7 +250,7 @@ TRACE_EVENT(track_foreign_dirty,  	),  	TP_fast_assign( -		struct address_space *mapping = page_mapping(page); +		struct address_space *mapping = folio_mapping(folio);  		struct inode *inode = mapping ? mapping->host : NULL;  		strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32); @@ -258,7 +258,7 @@ TRACE_EVENT(track_foreign_dirty,  		__entry->ino		= inode ? inode->i_ino : 0;  		__entry->memcg_id	= wb->memcg_css->id;  		__entry->cgroup_ino	= __trace_wb_assign_cgroup(wb); -		__entry->page_cgroup_ino = cgroup_ino(page_memcg(page)->css.cgroup); +		__entry->page_cgroup_ino = cgroup_ino(folio_memcg(folio)->css.cgroup);  	),  	TP_printk("bdi %s[%llu]: ino=%lu memcg_id=%u cgroup_ino=%lu page_cgroup_ino=%lu", |