xref: /linux/fs/bcachefs/recovery_passes.h (revision 6f2a71a99ebd5dfaa7948a2e9c59eae94b741bd8)
1 #ifndef _BCACHEFS_RECOVERY_PASSES_H
2 #define _BCACHEFS_RECOVERY_PASSES_H
3 
4 extern const char * const bch2_recovery_passes[];
5 
6 extern const struct bch_sb_field_ops bch_sb_field_ops_recovery_passes;
7 
8 u64 bch2_recovery_passes_to_stable(u64 v);
9 u64 bch2_recovery_passes_from_stable(u64 v);
10 
11 u64 bch2_fsck_recovery_passes(void);
12 
13 void bch2_recovery_pass_set_no_ratelimit(struct bch_fs *, enum bch_recovery_pass);
14 
15 enum bch_run_recovery_pass_flags {
16 	RUN_RECOVERY_PASS_nopersistent	= BIT(0),
17 	RUN_RECOVERY_PASS_ratelimit	= BIT(1),
18 };
19 
go_rw_in_recovery(struct bch_fs * c)20 static inline bool go_rw_in_recovery(struct bch_fs *c)
21 {
22 	return (c->journal_keys.nr ||
23 		!c->opts.read_only ||
24 		!c->sb.clean ||
25 		c->opts.recovery_passes ||
26 		(c->opts.fsck && !(c->sb.features & BIT_ULL(BCH_FEATURE_no_alloc_info))));
27 }
28 
29 int bch2_run_print_explicit_recovery_pass(struct bch_fs *, enum bch_recovery_pass);
30 
31 int __bch2_run_explicit_recovery_pass(struct bch_fs *, struct printbuf *,
32 				      enum bch_recovery_pass,
33 				      enum bch_run_recovery_pass_flags);
34 int bch2_run_explicit_recovery_pass(struct bch_fs *, struct printbuf *,
35 				    enum bch_recovery_pass,
36 				    enum bch_run_recovery_pass_flags);
37 
38 int bch2_require_recovery_pass(struct bch_fs *, struct printbuf *,
39 			       enum bch_recovery_pass);
40 
41 int bch2_run_online_recovery_passes(struct bch_fs *, u64);
42 int bch2_run_recovery_passes(struct bch_fs *, enum bch_recovery_pass);
43 
44 void bch2_recovery_pass_status_to_text(struct printbuf *, struct bch_fs *);
45 
46 void bch2_fs_recovery_passes_init(struct bch_fs *);
47 
48 #endif /* _BCACHEFS_RECOVERY_PASSES_H */
49