diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-07-14 01:10:24 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:35 -0400 |
commit | 4ab35c34d5ab258fdd7325315fe5d94699e51eb4 (patch) | |
tree | 678ecaf715a4962e728531f9d493f4d7564c719a /fs/bcachefs/recovery.c | |
parent | e4085b70f21f0e4b578a50a9fd7e84f2a055010f (diff) | |
download | lwn-4ab35c34d5ab258fdd7325315fe5d94699e51eb4.tar.gz lwn-4ab35c34d5ab258fdd7325315fe5d94699e51eb4.zip |
bcachefs: Fix subvol/snapshot deleting in recovery
fsck doesn't want to run while we're cleaning up deleted snapshots - if
that work needs to be done, we want it to have finished before fsck
runs, otherwise fsck will get confused when it finds multiple keys in
the same snapshot ID equivalence class (i.e. the mechanism that
snapshot deletion uses for cleaning up redundant keys).
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/recovery.c')
-rw-r--r-- | fs/bcachefs/recovery.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c index e6aed8d79bea..b7598e26c683 100644 --- a/fs/bcachefs/recovery.c +++ b/fs/bcachefs/recovery.c @@ -1396,6 +1396,12 @@ out: bch2_journal_entries_free(c); } kfree(clean); + + if (!ret && test_bit(BCH_FS_HAVE_DELETED_SNAPSHOTS, &c->flags)) { + bch2_fs_read_write_early(c); + bch2_delete_dead_snapshots_async(c); + } + if (ret) bch_err(c, "Error in recovery: %s (%i)", err, ret); else |