Loading fs/btrfs/qgroup.c +9 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading fs/btrfs/qgroup.h +8 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading include/trace/events/btrfs.h +113 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
fs/btrfs/qgroup.c +9 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading
fs/btrfs/qgroup.h +8 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading
include/trace/events/btrfs.h +113 −0 Original line number Diff line number Diff line Loading @@ -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