| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef _BCACHEFS_DEBUG_H | |
| #define _BCACHEFS_DEBUG_H | |
| #include "bcachefs.h" | |
| struct bio; | |
| struct btree; | |
| struct bch_fs; | |
| void __bch2_btree_verify(struct bch_fs *, struct btree *); | |
| void bch2_btree_node_ondisk_to_text(struct printbuf *, struct bch_fs *, | |
| const struct btree *); | |
| static inline void bch2_btree_verify(struct bch_fs *c, struct btree *b) | |
| { | |
| if (static_branch_unlikely(&bch2_verify_btree_ondisk)) | |
| __bch2_btree_verify(c, b); | |
| } | |
| #ifdef CONFIG_DEBUG_FS | |
| struct dump_iter { | |
| struct bch_fs *c; | |
| struct async_obj_list *list; | |
| enum btree_id id; | |
| struct bpos from; | |
| struct bpos prev_node; | |
| u64 iter; | |
| struct printbuf buf; | |
| char __user *ubuf; /* destination user buffer */ | |
| size_t size; /* size of requested read */ | |
| ssize_t ret; /* bytes read so far */ | |
| }; | |
| ssize_t bch2_debugfs_flush_buf(struct dump_iter *); | |
| int bch2_dump_release(struct inode *, struct file *); | |
| void bch2_fs_debug_exit(struct bch_fs *); | |
| void bch2_fs_debug_init(struct bch_fs *); | |
| #else | |
| static inline void bch2_fs_debug_exit(struct bch_fs *c) {} | |
| static inline void bch2_fs_debug_init(struct bch_fs *c) {} | |
| #endif | |
| void bch2_debug_exit(void); | |
| int bch2_debug_init(void); | |
| #endif /* _BCACHEFS_DEBUG_H */ |