bcachefs: bucket_alloc_fail tracepoint should only fire when we have to block
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 17 Oct 2022 11:07:28 +0000 (07:07 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:44 +0000 (17:09 -0400)
We don't want to fire the bucket_alloc_fail tracepoint on transaction
restart, when we can retry immediately - only when we the allocation
actually has to block.

Also, switch from sched_clock() to local_clock(), as we've been doing
elsewhere.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_foreground.c

index 0a7657541b8c0b6e340c548bf0d11f20d44e1319..ab288176695e1f7057206ba0e3a6c58bc6c9e4fd 100644 (file)
@@ -561,7 +561,7 @@ err:
                                &s,
                                cl == NULL,
                                "");
-       else
+       else if (!bch2_err_matches(PTR_ERR(ob), BCH_ERR_transaction_restart))
                trace_and_count(c, bucket_alloc_fail, ca,
                                bch2_alloc_reserves[reserve],
                                may_alloc_partial,
@@ -1093,7 +1093,7 @@ restart_find_oldest:
        hlist_add_head_rcu(&wp->node, head);
        mutex_unlock(&c->write_points_hash_lock);
 out:
-       wp->last_used = sched_clock();
+       wp->last_used = local_clock();
        return wp;
 }
 
@@ -1341,7 +1341,7 @@ void bch2_fs_allocator_foreground_init(struct bch_fs *c)
             wp < c->write_points + c->write_points_nr; wp++) {
                writepoint_init(wp, BCH_DATA_user);
 
-               wp->last_used   = sched_clock();
+               wp->last_used   = local_clock();
                wp->write_point = (unsigned long) wp;
                hlist_add_head_rcu(&wp->node,
                                   writepoint_hash(c, wp->write_point));