Commit 060ff30a authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: bch2_run_explicit_recovery_pass_persistent()

Flag that we need to run a recovery pass and run it - persistenly, so if
we crash it'll still get run.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 0a34c058
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "snapshot.h" #include "snapshot.h"
#include "subvolume.h" #include "subvolume.h"
#include "super.h" #include "super.h"
#include "super-io.h"
const char * const bch2_recovery_passes[] = { const char * const bch2_recovery_passes[] = {
#define x(_fn, ...) #_fn, #define x(_fn, ...) #_fn,
...@@ -112,6 +113,23 @@ int bch2_run_explicit_recovery_pass(struct bch_fs *c, ...@@ -112,6 +113,23 @@ int bch2_run_explicit_recovery_pass(struct bch_fs *c,
} }
} }
int bch2_run_explicit_recovery_pass_persistent(struct bch_fs *c,
enum bch_recovery_pass pass)
{
__le64 s = cpu_to_le64(bch2_recovery_passes_to_stable(BIT_ULL(pass)));
mutex_lock(&c->sb_lock);
struct bch_sb_field_ext *ext = bch2_sb_field_get(c->disk_sb.sb, ext);
if (!(ext->recovery_passes_required[0] & s)) {
ext->recovery_passes_required[0] |= s;
bch2_write_super(c);
}
mutex_unlock(&c->sb_lock);
return bch2_run_explicit_recovery_pass(c, pass);
}
u64 bch2_fsck_recovery_passes(void) u64 bch2_fsck_recovery_passes(void)
{ {
u64 ret = 0; u64 ret = 0;
......
...@@ -9,6 +9,7 @@ u64 bch2_recovery_passes_from_stable(u64 v); ...@@ -9,6 +9,7 @@ u64 bch2_recovery_passes_from_stable(u64 v);
u64 bch2_fsck_recovery_passes(void); u64 bch2_fsck_recovery_passes(void);
int bch2_run_explicit_recovery_pass(struct bch_fs *, enum bch_recovery_pass); int bch2_run_explicit_recovery_pass(struct bch_fs *, enum bch_recovery_pass);
int bch2_run_explicit_recovery_pass_persistent(struct bch_fs *, enum bch_recovery_pass);
int bch2_run_online_recovery_passes(struct bch_fs *); int bch2_run_online_recovery_passes(struct bch_fs *);
int bch2_run_recovery_passes(struct bch_fs *); int bch2_run_recovery_passes(struct bch_fs *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment