]> Git Repo - linux.git/commitdiff
bcachefs: bch2_run_explicit_recovery_pass_persistent()
authorKent Overstreet <[email protected]>
Sat, 30 Mar 2024 00:43:39 +0000 (20:43 -0400)
committerKent Overstreet <[email protected]>
Mon, 1 Apr 2024 00:36:12 +0000 (20:36 -0400)
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: Kent Overstreet <[email protected]>
fs/bcachefs/recovery_passes.c
fs/bcachefs/recovery_passes.h

index bab586dc395a6ac838cfacfe67fd18a4d80e0df6..fb22cce10f668330b8395884ba908d3603db4952 100644 (file)
@@ -16,6 +16,7 @@
 #include "snapshot.h"
 #include "subvolume.h"
 #include "super.h"
+#include "super-io.h"
 
 const char * const bch2_recovery_passes[] = {
 #define x(_fn, ...)    #_fn,
@@ -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 ret = 0;
index abefa67749ebb3e9943625c3371d3b70b82fd516..99b464e127b80b69c11a6955df564a60b836639b 100644 (file)
@@ -9,6 +9,7 @@ u64 bch2_recovery_passes_from_stable(u64 v);
 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_persistent(struct bch_fs *, enum bch_recovery_pass);
 
 int bch2_run_online_recovery_passes(struct bch_fs *);
 int bch2_run_recovery_passes(struct bch_fs *);
This page took 0.059126 seconds and 4 git commands to generate.