mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 19:21:28 +02:00
bcachefs: Add a recovery pass for making sure root inode is readable
If the root inode/subvolume is unreadable we can repair automatically - but only if we're still in recovery, so that we can rewind to the appropriate recovery pass. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
bdad8962c9
commit
d12bd41018
|
|
@ -52,6 +52,21 @@ static int bch2_set_may_go_rw(struct bch_fs *c)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure root inode is readable while we're still in recovery and can rewind
|
||||
* for repair:
|
||||
*/
|
||||
static int bch2_lookup_root_inode(struct bch_fs *c)
|
||||
{
|
||||
subvol_inum inum = BCACHEFS_ROOT_SUBVOL_INUM;
|
||||
struct bch_inode_unpacked inode_u;
|
||||
struct bch_subvolume subvol;
|
||||
|
||||
return bch2_trans_do(c,
|
||||
bch2_subvolume_get(trans, inum.subvol, true, &subvol) ?:
|
||||
bch2_inode_find_by_inum_trans(trans, inum, &inode_u));
|
||||
}
|
||||
|
||||
struct recovery_pass_fn {
|
||||
int (*fn)(struct bch_fs *);
|
||||
unsigned when;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,8 @@
|
|||
x(resume_logged_ops, 23, PASS_ALWAYS) \
|
||||
x(delete_dead_inodes, 32, PASS_ALWAYS) \
|
||||
x(fix_reflink_p, 33, 0) \
|
||||
x(set_fs_needs_rebalance, 34, 0)
|
||||
x(set_fs_needs_rebalance, 34, 0) \
|
||||
x(lookup_root_inode, 42, PASS_ALWAYS|PASS_SILENT)
|
||||
|
||||
/* We normally enumerate recovery passes in the order we run them: */
|
||||
enum bch_recovery_pass {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user