mirror of
https://github.com/torvalds/linux.git
synced 2026-08-02 05:12:01 +02:00
bcachefs: Add assert for use of journal replay keys for updates
The journal replay keys mechanism can only be used for updates in early recovery, when still single threaded. Add some asserts to make sure we never accidentally use it elsewhere. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
32e573c362
commit
cc944fbe06
|
|
@ -743,6 +743,12 @@ struct bch_fs {
|
|||
#else
|
||||
struct percpu_ref writes;
|
||||
#endif
|
||||
/*
|
||||
* Certain operations are only allowed in single threaded mode, during
|
||||
* recovery, and we want to assert that this is the case:
|
||||
*/
|
||||
struct task_struct *recovery_task;
|
||||
|
||||
/*
|
||||
* Analagous to c->writes, for asynchronous ops that don't necessarily
|
||||
* need fs to be read-write
|
||||
|
|
|
|||
|
|
@ -999,6 +999,8 @@ do_bch2_trans_commit_to_journal_replay(struct btree_trans *trans)
|
|||
{
|
||||
struct bch_fs *c = trans->c;
|
||||
|
||||
BUG_ON(current != c->recovery_task);
|
||||
|
||||
trans_for_each_update(trans, i) {
|
||||
int ret = bch2_journal_key_insert(c, i->btree_id, i->level, i->k);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -441,6 +441,8 @@ static int __bch2_fs_read_write(struct bch_fs *c, bool early)
|
|||
{
|
||||
int ret;
|
||||
|
||||
BUG_ON(!test_bit(BCH_FS_may_go_rw, &c->flags));
|
||||
|
||||
if (test_bit(BCH_FS_initial_gc_unfixed, &c->flags)) {
|
||||
bch_err(c, "cannot go rw, unfixed btree errors");
|
||||
return -BCH_ERR_erofs_unfixed_errors;
|
||||
|
|
@ -1031,9 +1033,12 @@ int bch2_fs_start(struct bch_fs *c)
|
|||
bch2_dev_allocator_add(c, ca);
|
||||
bch2_recalc_capacity(c);
|
||||
|
||||
c->recovery_task = current;
|
||||
ret = BCH_SB_INITIALIZED(c->disk_sb.sb)
|
||||
? bch2_fs_recovery(c)
|
||||
: bch2_fs_initialize(c);
|
||||
c->recovery_task = NULL;
|
||||
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user