summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-07-13 09:17:06 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-07-13 09:19:28 -0400
commitc2f3e4c99c1e5e7c073aeec6d157c5d645734064 (patch)
tree9d4cd839ec43f7fe88fd631928bb4f55b22b296d
parent73740b9cf25fab1cab76c787f762b0fd4253c2f3 (diff)
Implement dump_stack()
Rust has this in the standard library - nice. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--include/linux/kernel.h2
-rw-r--r--include/linux/printk.h3
-rw-r--r--src/bcachefs.rs1
-rw-r--r--src/dump_stack.rs6
4 files changed, 10 insertions, 2 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 6eb8c8a0..efa73385 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -254,8 +254,6 @@ struct qstr {
#define POISON_FREE 0x6b
-static inline void dump_stack(void) {}
-
#define unsafe_memcpy(dst, src, bytes, justification) \
memcpy(dst, src, bytes)
diff --git a/include/linux/printk.h b/include/linux/printk.h
index 54536477..31ff7b65 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -205,4 +205,7 @@ void printk(const char *fmt, ...);
#define pr_devel_ratelimited(fmt, ...) \
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif
+
+void dump_stack(void);
+
#endif /* __TOOLS_LINUX_PRINTK_H */
diff --git a/src/bcachefs.rs b/src/bcachefs.rs
index 91c44db0..f49f9195 100644
--- a/src/bcachefs.rs
+++ b/src/bcachefs.rs
@@ -1,5 +1,6 @@
mod commands;
mod key;
+mod dump_stack;
mod logging;
mod wrappers;
diff --git a/src/dump_stack.rs b/src/dump_stack.rs
new file mode 100644
index 00000000..35f0ee27
--- /dev/null
+++ b/src/dump_stack.rs
@@ -0,0 +1,6 @@
+// This will show C frames in the backtrace
+#[no_mangle]
+pub extern "C" fn dump_stack() {
+ let bt = std::backtrace::Backtrace::force_capture();
+ println!("{}", bt);
+}