summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2018-04-30 03:04:44 -0400
committerDavid Sterba <dsterba@suse.com>2018-05-28 12:07:29 -0400
commit8b317901da4ab5576d109bf1aed7eb15cbe31d5f (patch)
treede1cb229fcd355b66a7b42642197174f5e4d7e38
parent3a2f8c07e1d60739eb6b90ffba41bd1d0de33fc2 (diff)
btrfs: trace: Allow trace_qgroup_update_counters() to record old rfer/excl value
Origin trace_qgroup_update_counters() only records qgroup id and its reference count change. It's good enough to debug qgroup accounting change, but when rescan race is involved, it's pretty hard to distinguish which modification belongs to which rescan. So add old_rfer and old_excl trace output to help distinguishing different rescan instance. (Different rescan instance should reset its qgroup->rfer to 0) For trace event parameter, it just changes from u64 qgroup_id to struct btrfs_qgroup *qgroup, so number of parameters is not changed at all. Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/qgroup.c4
-rw-r--r--include/trace/events/btrfs.h18
2 files changed, 13 insertions, 9 deletions
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 9fb758d5077a..ec2339a49ec3 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -1882,8 +1882,8 @@ static int qgroup_update_counters(struct btrfs_fs_info *fs_info,
1882 cur_old_count = btrfs_qgroup_get_old_refcnt(qg, seq); 1882 cur_old_count = btrfs_qgroup_get_old_refcnt(qg, seq);
1883 cur_new_count = btrfs_qgroup_get_new_refcnt(qg, seq); 1883 cur_new_count = btrfs_qgroup_get_new_refcnt(qg, seq);
1884 1884
1885 trace_qgroup_update_counters(fs_info, qg->qgroupid, 1885 trace_qgroup_update_counters(fs_info, qg, cur_old_count,
1886 cur_old_count, cur_new_count); 1886 cur_new_count);
1887 1887
1888 /* Rfer update part */ 1888 /* Rfer update part */
1889 if (cur_old_count == 0 && cur_new_count > 0) { 1889 if (cur_old_count == 0 && cur_new_count > 0) {
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
index 914ddb7a6d25..29f9b14412ad 100644
--- a/include/trace/events/btrfs.h
+++ b/include/trace/events/btrfs.h
@@ -1607,27 +1607,31 @@ TRACE_EVENT(btrfs_qgroup_account_extent,
1607 1607
1608TRACE_EVENT(qgroup_update_counters, 1608TRACE_EVENT(qgroup_update_counters,
1609 1609
1610 TP_PROTO(const struct btrfs_fs_info *fs_info, u64 qgid, 1610 TP_PROTO(const struct btrfs_fs_info *fs_info,
1611 struct btrfs_qgroup *qgroup,
1611 u64 cur_old_count, u64 cur_new_count), 1612 u64 cur_old_count, u64 cur_new_count),
1612 1613
1613 TP_ARGS(fs_info, qgid, cur_old_count, cur_new_count), 1614 TP_ARGS(fs_info, qgroup, cur_old_count, cur_new_count),
1614 1615
1615 TP_STRUCT__entry_btrfs( 1616 TP_STRUCT__entry_btrfs(
1616 __field( u64, qgid ) 1617 __field( u64, qgid )
1618 __field( u64, old_rfer )
1619 __field( u64, old_excl )
1617 __field( u64, cur_old_count ) 1620 __field( u64, cur_old_count )
1618 __field( u64, cur_new_count ) 1621 __field( u64, cur_new_count )
1619 ), 1622 ),
1620 1623
1621 TP_fast_assign_btrfs(fs_info, 1624 TP_fast_assign_btrfs(fs_info,
1622 __entry->qgid = qgid; 1625 __entry->qgid = qgroup->qgroupid;
1626 __entry->old_rfer = qgroup->rfer;
1627 __entry->old_excl = qgroup->excl;
1623 __entry->cur_old_count = cur_old_count; 1628 __entry->cur_old_count = cur_old_count;
1624 __entry->cur_new_count = cur_new_count; 1629 __entry->cur_new_count = cur_new_count;
1625 ), 1630 ),
1626 1631
1627 TP_printk_btrfs("qgid=%llu cur_old_count=%llu cur_new_count=%llu", 1632 TP_printk_btrfs("qgid=%llu old_rfer=%llu old_excl=%llu cur_old_count=%llu cur_new_count=%llu",
1628 __entry->qgid, 1633 __entry->qgid, __entry->old_rfer, __entry->old_excl,
1629 __entry->cur_old_count, 1634 __entry->cur_old_count, __entry->cur_new_count)
1630 __entry->cur_new_count)
1631); 1635);
1632 1636
1633TRACE_EVENT(qgroup_update_reserve, 1637TRACE_EVENT(qgroup_update_reserve,