kmem_cache_free(bch2_key_cache, ck);
}
- BUG_ON(atomic_long_read(&bc->nr_dirty) && !bch2_journal_error(&c->journal));
+ BUG_ON(atomic_long_read(&bc->nr_dirty) &&
+ !bch2_journal_error(&c->journal) &&
+ test_bit(BCH_FS_WAS_RW, &c->flags));
BUG_ON(atomic_long_read(&bc->nr_keys));
mutex_unlock(&bc->lock);
struct jset *last_journal_entry = NULL;
u64 blacklist_seq, journal_seq;
bool write_sb = false;
- int ret;
+ int ret = 0;
if (c->sb.clean)
clean = read_superblock_clean(c);
if (c->journal_seq_blacklist_table &&
c->journal_seq_blacklist_table->nr > 128)
queue_work(system_long_wq, &c->journal_seq_blacklist_gc_work);
-out:
+
ret = 0;
-err:
-fsck_err:
+out:
set_bit(BCH_FS_FSCK_DONE, &c->flags);
bch2_flush_fsck_errs(c);
else
bch_verbose(c, "ret %i", ret);
return ret;
+err:
+fsck_err:
+ bch2_fs_emergency_read_only(c);
+ goto out;
}
int bch2_fs_initialize(struct bch_fs *c)
percpu_ref_reinit(&c->writes);
set_bit(BCH_FS_RW, &c->flags);
+ set_bit(BCH_FS_WAS_RW, &c->flags);
return 0;
err:
__bch2_fs_read_only(c);