diff options
| author | Qu Wenruo <wqu@suse.com> | 2017-12-12 02:34:35 -0500 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2018-03-30 20:01:05 -0400 |
| commit | 4ee0d8832c2ecd08fd4ccbaa55484e6a500f2f34 (patch) | |
| tree | e9bb320db4632705a96dee98fc36640c4be3b0cd | |
| parent | 8287475a20552af66b32c07704dbdbeeb898ac1f (diff) | |
btrfs: qgroup: Update trace events for metadata reservation
Now trace_qgroup_meta_reserve() will have extra type parameter.
And introduce two new trace events:
1) trace_qgroup_meta_free_all_pertrans()
For btrfs_qgroup_free_meta_all_pertrans()
2) trace_qgroup_meta_convert()
For btrfs_qgroup_convert_reserved_meta()
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
| -rw-r--r-- | fs/btrfs/qgroup.c | 7 | ||||
| -rw-r--r-- | include/trace/events/btrfs.h | 55 |
2 files changed, 57 insertions, 5 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 836819c34c95..92e2c9f15951 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c | |||
| @@ -3138,7 +3138,7 @@ int __btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes, | |||
| 3138 | return 0; | 3138 | return 0; |
| 3139 | 3139 | ||
| 3140 | BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize)); | 3140 | BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize)); |
| 3141 | trace_qgroup_meta_reserve(root, (s64)num_bytes); | 3141 | trace_qgroup_meta_reserve(root, type, (s64)num_bytes); |
| 3142 | ret = qgroup_reserve(root, num_bytes, enforce, type); | 3142 | ret = qgroup_reserve(root, num_bytes, enforce, type); |
| 3143 | if (ret < 0) | 3143 | if (ret < 0) |
| 3144 | return ret; | 3144 | return ret; |
| @@ -3163,7 +3163,7 @@ void btrfs_qgroup_free_meta_all_pertrans(struct btrfs_root *root) | |||
| 3163 | return; | 3163 | return; |
| 3164 | 3164 | ||
| 3165 | /* TODO: Update trace point to handle such free */ | 3165 | /* TODO: Update trace point to handle such free */ |
| 3166 | trace_qgroup_meta_reserve(root, 0); | 3166 | trace_qgroup_meta_free_all_pertrans(root); |
| 3167 | /* Special value -1 means to free all reserved space */ | 3167 | /* Special value -1 means to free all reserved space */ |
| 3168 | btrfs_qgroup_free_refroot(fs_info, root->objectid, (u64)-1, | 3168 | btrfs_qgroup_free_refroot(fs_info, root->objectid, (u64)-1, |
| 3169 | BTRFS_QGROUP_RSV_META_PERTRANS); | 3169 | BTRFS_QGROUP_RSV_META_PERTRANS); |
| @@ -3185,7 +3185,7 @@ void __btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes, | |||
| 3185 | */ | 3185 | */ |
| 3186 | num_bytes = sub_root_meta_rsv(root, num_bytes, type); | 3186 | num_bytes = sub_root_meta_rsv(root, num_bytes, type); |
| 3187 | BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize)); | 3187 | BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize)); |
| 3188 | trace_qgroup_meta_reserve(root, -(s64)num_bytes); | 3188 | trace_qgroup_meta_reserve(root, type, -(s64)num_bytes); |
| 3189 | btrfs_qgroup_free_refroot(fs_info, root->objectid, num_bytes, type); | 3189 | btrfs_qgroup_free_refroot(fs_info, root->objectid, num_bytes, type); |
| 3190 | } | 3190 | } |
| 3191 | 3191 | ||
| @@ -3245,6 +3245,7 @@ void btrfs_qgroup_convert_reserved_meta(struct btrfs_root *root, int num_bytes) | |||
| 3245 | /* Same as btrfs_qgroup_free_meta_prealloc() */ | 3245 | /* Same as btrfs_qgroup_free_meta_prealloc() */ |
| 3246 | num_bytes = sub_root_meta_rsv(root, num_bytes, | 3246 | num_bytes = sub_root_meta_rsv(root, num_bytes, |
| 3247 | BTRFS_QGROUP_RSV_META_PREALLOC); | 3247 | BTRFS_QGROUP_RSV_META_PREALLOC); |
| 3248 | trace_qgroup_meta_convert(root, num_bytes); | ||
| 3248 | qgroup_convert_meta(fs_info, root->objectid, num_bytes); | 3249 | qgroup_convert_meta(fs_info, root->objectid, num_bytes); |
| 3249 | } | 3250 | } |
| 3250 | 3251 | ||
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h index eee778ba1414..965c650a5273 100644 --- a/include/trace/events/btrfs.h +++ b/include/trace/events/btrfs.h | |||
| @@ -1663,6 +1663,28 @@ TRACE_EVENT(qgroup_update_reserve, | |||
| 1663 | 1663 | ||
| 1664 | TRACE_EVENT(qgroup_meta_reserve, | 1664 | TRACE_EVENT(qgroup_meta_reserve, |
| 1665 | 1665 | ||
| 1666 | TP_PROTO(struct btrfs_root *root, s64 diff, int type), | ||
| 1667 | |||
| 1668 | TP_ARGS(root, diff, type), | ||
| 1669 | |||
| 1670 | TP_STRUCT__entry_btrfs( | ||
| 1671 | __field( u64, refroot ) | ||
| 1672 | __field( s64, diff ) | ||
| 1673 | __field( int, type ) | ||
| 1674 | ), | ||
| 1675 | |||
| 1676 | TP_fast_assign_btrfs(root->fs_info, | ||
| 1677 | __entry->refroot = root->objectid; | ||
| 1678 | __entry->diff = diff; | ||
| 1679 | ), | ||
| 1680 | |||
| 1681 | TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld", | ||
| 1682 | show_root_type(__entry->refroot), | ||
| 1683 | show_qgroup_rsv_type(__entry->type), __entry->diff) | ||
| 1684 | ); | ||
| 1685 | |||
| 1686 | TRACE_EVENT(qgroup_meta_convert, | ||
| 1687 | |||
| 1666 | TP_PROTO(struct btrfs_root *root, s64 diff), | 1688 | TP_PROTO(struct btrfs_root *root, s64 diff), |
| 1667 | 1689 | ||
| 1668 | TP_ARGS(root, diff), | 1690 | TP_ARGS(root, diff), |
| @@ -1670,6 +1692,7 @@ TRACE_EVENT(qgroup_meta_reserve, | |||
| 1670 | TP_STRUCT__entry_btrfs( | 1692 | TP_STRUCT__entry_btrfs( |
| 1671 | __field( u64, refroot ) | 1693 | __field( u64, refroot ) |
| 1672 | __field( s64, diff ) | 1694 | __field( s64, diff ) |
| 1695 | __field( int, type ) | ||
| 1673 | ), | 1696 | ), |
| 1674 | 1697 | ||
| 1675 | TP_fast_assign_btrfs(root->fs_info, | 1698 | TP_fast_assign_btrfs(root->fs_info, |
| @@ -1677,8 +1700,36 @@ TRACE_EVENT(qgroup_meta_reserve, | |||
| 1677 | __entry->diff = diff; | 1700 | __entry->diff = diff; |
| 1678 | ), | 1701 | ), |
| 1679 | 1702 | ||
| 1680 | TP_printk_btrfs("refroot=%llu(%s) diff=%lld", | 1703 | TP_printk_btrfs("refroot=%llu(%s) type=%s->%s diff=%lld", |
| 1681 | show_root_type(__entry->refroot), __entry->diff) | 1704 | show_root_type(__entry->refroot), |
| 1705 | show_qgroup_rsv_type(BTRFS_QGROUP_RSV_META_PREALLOC), | ||
| 1706 | show_qgroup_rsv_type(BTRFS_QGROUP_RSV_META_PERTRANS), | ||
| 1707 | __entry->diff) | ||
| 1708 | ); | ||
| 1709 | |||
| 1710 | TRACE_EVENT(qgroup_meta_free_all_pertrans, | ||
| 1711 | |||
| 1712 | TP_PROTO(struct btrfs_root *root), | ||
| 1713 | |||
| 1714 | TP_ARGS(root), | ||
| 1715 | |||
| 1716 | TP_STRUCT__entry_btrfs( | ||
| 1717 | __field( u64, refroot ) | ||
| 1718 | __field( s64, diff ) | ||
| 1719 | __field( int, type ) | ||
| 1720 | ), | ||
| 1721 | |||
| 1722 | TP_fast_assign_btrfs(root->fs_info, | ||
| 1723 | __entry->refroot = root->objectid; | ||
| 1724 | spin_lock(&root->qgroup_meta_rsv_lock); | ||
| 1725 | __entry->diff = -(s64)root->qgroup_meta_rsv_pertrans; | ||
| 1726 | spin_unlock(&root->qgroup_meta_rsv_lock); | ||
| 1727 | __entry->type = BTRFS_QGROUP_RSV_META_PERTRANS; | ||
| 1728 | ), | ||
| 1729 | |||
| 1730 | TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld", | ||
| 1731 | show_root_type(__entry->refroot), | ||
| 1732 | show_qgroup_rsv_type(__entry->type), __entry->diff) | ||
| 1682 | ); | 1733 | ); |
| 1683 | 1734 | ||
| 1684 | DECLARE_EVENT_CLASS(btrfs__prelim_ref, | 1735 | DECLARE_EVENT_CLASS(btrfs__prelim_ref, |
