diff options
| author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-31 13:01:44 -0400 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-06-02 12:16:36 -0400 |
| commit | 0942b852d4070e448231d2e204ac82ad47f5920a (patch) | |
| tree | 9354ca9262d85c34b09ff71955fd478515749003 /fs/bcachefs/subvolume.c | |
| parent | a2ffab0e659831761443f3ae6341c30e845dce43 (diff) | |
bcachefs: BCH_RECOVERY_PASS_NO_RATELIMIT
Add a superblock flag to temporarily disable ratelimiting for a recovery
pass.
This will be used to make check_key_has_snapshot safer: we don't want to
delete a key for a missing snapshot unless we know that the snapshots
and subvolumes btrees are consistent, i.e. check_snapshots and
check_subvols have run recently.
Changing those btrees - creating/deleting a subvolume or snapshot - will
set the "disable ratelimit" flag, i.e. ensuring that those passes run if
check_key_has_snapshot discovers an error.
We're only disabling ratelimiting in the snapshot/subvol delete paths,
we're not so concerned about the create paths.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/subvolume.c')
| -rw-r--r-- | fs/bcachefs/subvolume.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/bcachefs/subvolume.c b/fs/bcachefs/subvolume.c index e22837396bd9..77ba50df2ff4 100644 --- a/fs/bcachefs/subvolume.c +++ b/fs/bcachefs/subvolume.c @@ -482,9 +482,12 @@ err: static int bch2_subvolume_delete(struct btree_trans *trans, u32 subvolid) { - return bch2_subvolumes_reparent(trans, subvolid) ?: + int ret = bch2_subvolumes_reparent(trans, subvolid) ?: commit_do(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc, __bch2_subvolume_delete(trans, subvolid)); + + bch2_recovery_pass_set_no_ratelimit(trans->c, BCH_RECOVERY_PASS_check_subvols); + return ret; } static void bch2_subvolume_wait_for_pagecache_and_delete(struct work_struct *work) |