summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2022-09-26 18:18:00 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2022-09-27 02:40:59 -0400
commit3caa05715d62b6f23a56940da4de9cbfdb5b51a7 (patch)
tree25a41b17dc972aba95589da357a63707d50b5cd7
parent1918a8728d9dd4599f5b35af023662aa723da6bf (diff)
bcachefs: Improve bucket_alloc tracepoint
It now includes more info - whether the bucket was for metadata or data - and also call it in the same place as the bucket_alloc_fail tracepoint. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/alloc_foreground.c6
-rw-r--r--include/trace/events/bcachefs.h17
2 files changed, 16 insertions, 7 deletions
diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c
index 8d1c7797f25a..ce365fec7f41 100644
--- a/fs/bcachefs/alloc_foreground.c
+++ b/fs/bcachefs/alloc_foreground.c
@@ -268,7 +268,6 @@ static struct open_bucket *__try_alloc_bucket(struct bch_fs *c, struct bch_dev *
spin_unlock(&c->freelist_lock);
- trace_and_count(c, bucket_alloc, ca, bch2_alloc_reserves[reserve]);
return ob;
}
@@ -575,7 +574,10 @@ err:
if (!ob)
ob = ERR_PTR(-BCH_ERR_no_buckets_found);
- if (IS_ERR(ob))
+ if (!IS_ERR(ob))
+ trace_and_count(c, bucket_alloc, ca, bch2_alloc_reserves[reserve],
+ may_alloc_partial, ob->bucket);
+ else
trace_and_count(c, bucket_alloc_fail,
ca, bch2_alloc_reserves[reserve],
usage.d[BCH_DATA_free].buckets,
diff --git a/include/trace/events/bcachefs.h b/include/trace/events/bcachefs.h
index 74c4ab755441..d3d9e965e702 100644
--- a/include/trace/events/bcachefs.h
+++ b/include/trace/events/bcachefs.h
@@ -511,22 +511,29 @@ DEFINE_EVENT(bch_fs, gc_gens_end,
/* Allocator */
TRACE_EVENT(bucket_alloc,
- TP_PROTO(struct bch_dev *ca, const char *alloc_reserve),
- TP_ARGS(ca, alloc_reserve),
+ TP_PROTO(struct bch_dev *ca, const char *alloc_reserve,
+ bool user, u64 bucket),
+ TP_ARGS(ca, alloc_reserve, user, bucket),
TP_STRUCT__entry(
__field(dev_t, dev )
__array(char, reserve, 16 )
+ __field(bool, user )
+ __field(u64, bucket )
),
TP_fast_assign(
__entry->dev = ca->dev;
strlcpy(__entry->reserve, alloc_reserve, sizeof(__entry->reserve));
+ __entry->user = user;
+ __entry->bucket = bucket;
),
- TP_printk("%d,%d reserve %s",
+ TP_printk("%d,%d reserve %s user %u bucket %llu",
MAJOR(__entry->dev), MINOR(__entry->dev),
- __entry->reserve)
+ __entry->reserve,
+ __entry->user,
+ __entry->bucket)
);
TRACE_EVENT(bucket_alloc_fail,
@@ -556,7 +563,7 @@ TRACE_EVENT(bucket_alloc_fail,
__field(u64, need_journal_commit )
__field(u64, nouse )
__field(bool, nonblocking )
- __array(char, err, 16 )
+ __array(char, err, 32 )
),
TP_fast_assign(