btrfs: qgroup: Add new trace point for qgroup data reserve
Now each qgroup reserve for data will has its ftrace event for better debugging. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
		
							parent
							
								
									b9d0b38928
								
							
						
					
					
						commit
						81fb6f77a0
					
				| @ -2516,10 +2516,12 @@ int btrfs_qgroup_reserve_data(struct inode *inode, u64 start, u64 len) | ||||
| 
 | ||||
| 	changeset.bytes_changed = 0; | ||||
| 	changeset.range_changed = ulist_alloc(GFP_NOFS); | ||||
| 
 | ||||
| 	ret = set_record_extent_bits(&BTRFS_I(inode)->io_tree, start, | ||||
| 			start + len -1, EXTENT_QGROUP_RESERVED, GFP_NOFS, | ||||
| 			&changeset); | ||||
| 	trace_btrfs_qgroup_reserve_data(inode, start, len, | ||||
| 					changeset.bytes_changed, | ||||
| 					QGROUP_RESERVE); | ||||
| 	if (ret < 0) | ||||
| 		goto cleanup; | ||||
| 	ret = qgroup_reserve(root, changeset.bytes_changed); | ||||
| @ -2544,6 +2546,7 @@ static int __btrfs_qgroup_release_data(struct inode *inode, u64 start, u64 len, | ||||
| 				       int free) | ||||
| { | ||||
| 	struct extent_changeset changeset; | ||||
| 	int trace_op = QGROUP_RELEASE; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	changeset.bytes_changed = 0; | ||||
| @ -2557,8 +2560,12 @@ static int __btrfs_qgroup_release_data(struct inode *inode, u64 start, u64 len, | ||||
| 	if (ret < 0) | ||||
| 		goto out; | ||||
| 
 | ||||
| 	if (free) | ||||
| 	if (free) { | ||||
| 		qgroup_free(BTRFS_I(inode)->root, changeset.bytes_changed); | ||||
| 		trace_op = QGROUP_FREE; | ||||
| 	} | ||||
| 	trace_btrfs_qgroup_release_data(inode, start, len, | ||||
| 					changeset.bytes_changed, trace_op); | ||||
| out: | ||||
| 	ulist_free(changeset.range_changed); | ||||
| 	return ret; | ||||
|  | ||||
| @ -33,6 +33,13 @@ struct btrfs_qgroup_extent_record { | ||||
| 	struct ulist *old_roots; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * For qgroup event trace points only | ||||
|  */ | ||||
| #define QGROUP_RESERVE		(1<<0) | ||||
| #define QGROUP_RELEASE		(1<<1) | ||||
| #define QGROUP_FREE		(1<<2) | ||||
| 
 | ||||
| int btrfs_quota_enable(struct btrfs_trans_handle *trans, | ||||
| 		       struct btrfs_fs_info *fs_info); | ||||
| int btrfs_quota_disable(struct btrfs_trans_handle *trans, | ||||
| @ -81,6 +88,7 @@ static inline void btrfs_qgroup_free_delayed_ref(struct btrfs_fs_info *fs_info, | ||||
| 						 u64 ref_root, u64 num_bytes) | ||||
| { | ||||
| 	btrfs_qgroup_free_refroot(fs_info, ref_root, num_bytes); | ||||
| 	trace_btrfs_qgroup_free_delayed_ref(ref_root, num_bytes); | ||||
| } | ||||
| void assert_qgroups_uptodate(struct btrfs_trans_handle *trans); | ||||
| 
 | ||||
|  | ||||
| @ -1117,6 +1117,119 @@ DEFINE_EVENT(btrfs__workqueue_done, btrfs_workqueue_destroy, | ||||
| 	TP_ARGS(wq) | ||||
| ); | ||||
| 
 | ||||
| DECLARE_EVENT_CLASS(btrfs__qgroup_data_map, | ||||
| 
 | ||||
| 	TP_PROTO(struct inode *inode, u64 free_reserved), | ||||
| 
 | ||||
| 	TP_ARGS(inode, free_reserved), | ||||
| 
 | ||||
| 	TP_STRUCT__entry( | ||||
| 		__field(	u64,		rootid		) | ||||
| 		__field(	unsigned long,	ino		) | ||||
| 		__field(	u64,		free_reserved	) | ||||
| 	), | ||||
| 
 | ||||
| 	TP_fast_assign( | ||||
| 		__entry->rootid		=	BTRFS_I(inode)->root->objectid; | ||||
| 		__entry->ino		=	inode->i_ino; | ||||
| 		__entry->free_reserved	=	free_reserved; | ||||
| 	), | ||||
| 
 | ||||
| 	TP_printk("rootid=%llu, ino=%lu, free_reserved=%llu", | ||||
| 		  __entry->rootid, __entry->ino, __entry->free_reserved) | ||||
| ); | ||||
| 
 | ||||
| DEFINE_EVENT(btrfs__qgroup_data_map, btrfs_qgroup_init_data_rsv_map, | ||||
| 
 | ||||
| 	TP_PROTO(struct inode *inode, u64 free_reserved), | ||||
| 
 | ||||
| 	TP_ARGS(inode, free_reserved) | ||||
| ); | ||||
| 
 | ||||
| DEFINE_EVENT(btrfs__qgroup_data_map, btrfs_qgroup_free_data_rsv_map, | ||||
| 
 | ||||
| 	TP_PROTO(struct inode *inode, u64 free_reserved), | ||||
| 
 | ||||
| 	TP_ARGS(inode, free_reserved) | ||||
| ); | ||||
| 
 | ||||
| #define BTRFS_QGROUP_OPERATIONS				\ | ||||
| 	{ QGROUP_RESERVE,	"reserve"	},	\ | ||||
| 	{ QGROUP_RELEASE,	"release"	},	\ | ||||
| 	{ QGROUP_FREE,		"free"		} | ||||
| 
 | ||||
| DECLARE_EVENT_CLASS(btrfs__qgroup_rsv_data, | ||||
| 
 | ||||
| 	TP_PROTO(struct inode *inode, u64 start, u64 len, u64 reserved, int op), | ||||
| 
 | ||||
| 	TP_ARGS(inode, start, len, reserved, op), | ||||
| 
 | ||||
| 	TP_STRUCT__entry( | ||||
| 		__field(	u64,		rootid		) | ||||
| 		__field(	unsigned long,	ino		) | ||||
| 		__field(	u64,		start		) | ||||
| 		__field(	u64,		len		) | ||||
| 		__field(	u64,		reserved	) | ||||
| 		__field(	int,		op		) | ||||
| 	), | ||||
| 
 | ||||
| 	TP_fast_assign( | ||||
| 		__entry->rootid		= BTRFS_I(inode)->root->objectid; | ||||
| 		__entry->ino		= inode->i_ino; | ||||
| 		__entry->start		= start; | ||||
| 		__entry->len		= len; | ||||
| 		__entry->reserved	= reserved; | ||||
| 		__entry->op		= op; | ||||
| 	), | ||||
| 
 | ||||
| 	TP_printk("root=%llu, ino=%lu, start=%llu, len=%llu, reserved=%llu, op=%s", | ||||
| 		  __entry->rootid, __entry->ino, __entry->start, __entry->len, | ||||
| 		  __entry->reserved, | ||||
| 		  __print_flags((unsigned long)__entry->op, "", | ||||
| 				BTRFS_QGROUP_OPERATIONS) | ||||
| 	) | ||||
| ); | ||||
| 
 | ||||
| DEFINE_EVENT(btrfs__qgroup_rsv_data, btrfs_qgroup_reserve_data, | ||||
| 
 | ||||
| 	TP_PROTO(struct inode *inode, u64 start, u64 len, u64 reserved, int op), | ||||
| 
 | ||||
| 	TP_ARGS(inode, start, len, reserved, op) | ||||
| ); | ||||
| 
 | ||||
| DEFINE_EVENT(btrfs__qgroup_rsv_data, btrfs_qgroup_release_data, | ||||
| 
 | ||||
| 	TP_PROTO(struct inode *inode, u64 start, u64 len, u64 reserved, int op), | ||||
| 
 | ||||
| 	TP_ARGS(inode, start, len, reserved, op) | ||||
| ); | ||||
| 
 | ||||
| DECLARE_EVENT_CLASS(btrfs__qgroup_delayed_ref, | ||||
| 
 | ||||
| 	TP_PROTO(u64 ref_root, u64 reserved), | ||||
| 
 | ||||
| 	TP_ARGS(ref_root, reserved), | ||||
| 
 | ||||
| 	TP_STRUCT__entry( | ||||
| 		__field(	u64,		ref_root	) | ||||
| 		__field(	u64,		reserved	) | ||||
| 	), | ||||
| 
 | ||||
| 	TP_fast_assign( | ||||
| 		__entry->ref_root	= ref_root; | ||||
| 		__entry->reserved	= reserved; | ||||
| 	), | ||||
| 
 | ||||
| 	TP_printk("root=%llu, reserved=%llu, op=free", | ||||
| 		  __entry->ref_root, __entry->reserved) | ||||
| ); | ||||
| 
 | ||||
| DEFINE_EVENT(btrfs__qgroup_delayed_ref, btrfs_qgroup_free_delayed_ref, | ||||
| 
 | ||||
| 	TP_PROTO(u64 ref_root, u64 reserved), | ||||
| 
 | ||||
| 	TP_ARGS(ref_root, reserved) | ||||
| ); | ||||
| #endif /* _TRACE_BTRFS_H */ | ||||
| 
 | ||||
| /* This part must be outside protection */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user