Since we have normal ticketed flushing and preemptive flushing, adjust
the tracepoint so that we know the source of the flushing action to make
it easier to debug problems.

Reviewed-by: Nikolay Borisov <nbori...@suse.com>
Signed-off-by: Josef Bacik <jo...@toxicpanda.com>
---
 fs/btrfs/space-info.c        | 20 ++++++++++++--------
 include/trace/events/btrfs.h | 10 ++++++----
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c
index 6afb9cac694a..48c2a4eae235 100644
--- a/fs/btrfs/space-info.c
+++ b/fs/btrfs/space-info.c
@@ -667,7 +667,7 @@ static int may_commit_transaction(struct btrfs_fs_info 
*fs_info,
  */
 static void flush_space(struct btrfs_fs_info *fs_info,
                       struct btrfs_space_info *space_info, u64 num_bytes,
-                      enum btrfs_flush_state state)
+                      enum btrfs_flush_state state, bool for_preempt)
 {
        struct btrfs_root *root = fs_info->extent_root;
        struct btrfs_trans_handle *trans;
@@ -750,7 +750,7 @@ static void flush_space(struct btrfs_fs_info *fs_info,
        }
 
        trace_btrfs_flush_space(fs_info, space_info->flags, num_bytes, state,
-                               ret);
+                               ret, for_preempt);
        return;
 }
 
@@ -989,7 +989,8 @@ static void btrfs_async_reclaim_metadata_space(struct 
work_struct *work)
 
        flush_state = FLUSH_DELAYED_ITEMS_NR;
        do {
-               flush_space(fs_info, space_info, to_reclaim, flush_state);
+               flush_space(fs_info, space_info, to_reclaim, flush_state,
+                           false);
                spin_lock(&space_info->lock);
                if (list_empty(&space_info->tickets)) {
                        space_info->flush = 0;
@@ -1125,7 +1126,7 @@ static void btrfs_preempt_reclaim_metadata_space(struct 
work_struct *work)
                to_reclaim >>= 2;
                if (!to_reclaim)
                        to_reclaim = btrfs_calc_insert_metadata_size(fs_info, 
1);
-               flush_space(fs_info, space_info, to_reclaim, flush);
+               flush_space(fs_info, space_info, to_reclaim, flush, true);
                cond_resched();
                spin_lock(&space_info->lock);
        }
@@ -1222,7 +1223,8 @@ static void btrfs_async_reclaim_data_space(struct 
work_struct *work)
        spin_unlock(&space_info->lock);
 
        while (!space_info->full) {
-               flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE);
+               flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE,
+                           false);
                spin_lock(&space_info->lock);
                if (list_empty(&space_info->tickets)) {
                        space_info->flush = 0;
@@ -1235,7 +1237,7 @@ static void btrfs_async_reclaim_data_space(struct 
work_struct *work)
 
        while (flush_state < ARRAY_SIZE(data_flush_states)) {
                flush_space(fs_info, space_info, U64_MAX,
-                           data_flush_states[flush_state]);
+                           data_flush_states[flush_state], false);
                spin_lock(&space_info->lock);
                if (list_empty(&space_info->tickets)) {
                        space_info->flush = 0;
@@ -1308,7 +1310,8 @@ static void priority_reclaim_metadata_space(struct 
btrfs_fs_info *fs_info,
 
        flush_state = 0;
        do {
-               flush_space(fs_info, space_info, to_reclaim, 
states[flush_state]);
+               flush_space(fs_info, space_info, to_reclaim, 
states[flush_state],
+                           false);
                flush_state++;
                spin_lock(&space_info->lock);
                if (ticket->bytes == 0) {
@@ -1324,7 +1327,8 @@ static void priority_reclaim_data_space(struct 
btrfs_fs_info *fs_info,
                                        struct reserve_ticket *ticket)
 {
        while (!space_info->full) {
-               flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE);
+               flush_space(fs_info, space_info, U64_MAX, ALLOC_CHUNK_FORCE,
+                           false);
                spin_lock(&space_info->lock);
                if (ticket->bytes == 0) {
                        spin_unlock(&space_info->lock);
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
index 0cf02dfd4c01..74e5cc247b80 100644
--- a/include/trace/events/btrfs.h
+++ b/include/trace/events/btrfs.h
@@ -1113,15 +1113,16 @@ TRACE_EVENT(btrfs_trigger_flush,
 TRACE_EVENT(btrfs_flush_space,
 
        TP_PROTO(const struct btrfs_fs_info *fs_info, u64 flags, u64 num_bytes,
-                int state, int ret),
+                int state, int ret, bool for_preempt),
 
-       TP_ARGS(fs_info, flags, num_bytes, state, ret),
+       TP_ARGS(fs_info, flags, num_bytes, state, ret, for_preempt),
 
        TP_STRUCT__entry_btrfs(
                __field(        u64,    flags                   )
                __field(        u64,    num_bytes               )
                __field(        int,    state                   )
                __field(        int,    ret                     )
+               __field(        bool,   for_preempt             )
        ),
 
        TP_fast_assign_btrfs(fs_info,
@@ -1129,15 +1130,16 @@ TRACE_EVENT(btrfs_flush_space,
                __entry->num_bytes      =       num_bytes;
                __entry->state          =       state;
                __entry->ret            =       ret;
+               __entry->for_preempt    =       for_preempt;
        ),
 
-       TP_printk_btrfs("state=%d(%s) flags=%llu(%s) num_bytes=%llu ret=%d",
+       TP_printk_btrfs("state=%d(%s) flags=%llu(%s) num_bytes=%llu ret=%d 
for_preempt=%d",
                  __entry->state,
                  __print_symbolic(__entry->state, FLUSH_STATES),
                  __entry->flags,
                  __print_flags((unsigned long)__entry->flags, "|",
                                BTRFS_GROUP_FLAGS),
-                 __entry->num_bytes, __entry->ret)
+                 __entry->num_bytes, __entry->ret, __entry->for_preempt)
 );
 
 DECLARE_EVENT_CLASS(btrfs__reserved_extent,
-- 
2.26.2

Reply via email to