]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - c_src/libbcachefs/clock_types.h
move Rust sources to top level, C sources into c_src
[bcachefs-tools-debian] / c_src / libbcachefs / clock_types.h
diff --git a/c_src/libbcachefs/clock_types.h b/c_src/libbcachefs/clock_types.h
new file mode 100644 (file)
index 0000000..5fae001
--- /dev/null
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BCACHEFS_CLOCK_TYPES_H
+#define _BCACHEFS_CLOCK_TYPES_H
+
+#include "util.h"
+
+#define NR_IO_TIMERS           (BCH_SB_MEMBERS_MAX * 3)
+
+/*
+ * Clocks/timers in units of sectors of IO:
+ *
+ * Note - they use percpu batching, so they're only approximate.
+ */
+
+struct io_timer;
+typedef void (*io_timer_fn)(struct io_timer *);
+
+struct io_timer {
+       io_timer_fn             fn;
+       unsigned long           expire;
+};
+
+/* Amount to buffer up on a percpu counter */
+#define IO_CLOCK_PCPU_SECTORS  128
+
+typedef HEAP(struct io_timer *)        io_timer_heap;
+
+struct io_clock {
+       atomic64_t              now;
+       u16 __percpu            *pcpu_buf;
+       unsigned                max_slop;
+
+       spinlock_t              timer_lock;
+       io_timer_heap           timers;
+};
+
+#endif /* _BCACHEFS_CLOCK_TYPES_H */