summaryrefslogtreecommitdiff
path: root/fs/bcachefs/clock.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/clock.c')
-rw-r--r--fs/bcachefs/clock.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/fs/bcachefs/clock.c b/fs/bcachefs/clock.c
index 8e9264b5a84e..1c6d0cdca3c5 100644
--- a/fs/bcachefs/clock.c
+++ b/fs/bcachefs/clock.c
@@ -40,15 +40,13 @@ out:
void bch2_io_timer_del(struct io_clock *clock, struct io_timer *timer)
{
- spin_lock(&clock->timer_lock);
+ guard(spinlock)(&clock->timer_lock);
for (size_t i = 0; i < clock->timers.nr; i++)
if (clock->timers.data[i] == timer) {
min_heap_del(&clock->timers, i, &callbacks, NULL);
- break;
+ return;
}
-
- spin_unlock(&clock->timer_lock);
}
struct io_clock_wait {
@@ -133,28 +131,27 @@ void __bch2_increment_clock(struct io_clock *clock, u64 sectors)
struct io_timer *timer;
u64 now = atomic64_add_return(sectors, &clock->now);
- spin_lock(&clock->timer_lock);
+ guard(spinlock)(&clock->timer_lock);
+
while ((timer = get_expired_timer(clock, now)))
timer->fn(timer);
- spin_unlock(&clock->timer_lock);
}
void bch2_io_timers_to_text(struct printbuf *out, struct io_clock *clock)
{
- out->atomic++;
- spin_lock(&clock->timer_lock);
u64 now = atomic64_read(&clock->now);
printbuf_tabstop_push(out, 40);
prt_printf(out, "current time:\t%llu\n", now);
+ guard(printbuf_atomic)(out);
+ guard(spinlock)(&clock->timer_lock);
+
for (unsigned i = 0; i < clock->timers.nr; i++)
prt_printf(out, "%ps %ps:\t%llu\n",
clock->timers.data[i]->fn,
clock->timers.data[i]->fn2,
clock->timers.data[i]->expire);
- spin_unlock(&clock->timer_lock);
- --out->atomic;
}
void bch2_io_clock_exit(struct io_clock *clock)