Commit a0e0bda1 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Pass flags arg to bch2_alloc_write()

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent d1170ce5
...@@ -359,7 +359,7 @@ int bch2_alloc_replay_key(struct bch_fs *c, struct bkey_i *k) ...@@ -359,7 +359,7 @@ int bch2_alloc_replay_key(struct bch_fs *c, struct bkey_i *k)
static int __bch2_alloc_write_key(struct btree_trans *trans, struct bch_dev *ca, static int __bch2_alloc_write_key(struct btree_trans *trans, struct bch_dev *ca,
size_t b, struct btree_iter *iter, size_t b, struct btree_iter *iter,
u64 *journal_seq, unsigned flags) unsigned flags)
{ {
struct bch_fs *c = trans->c; struct bch_fs *c = trans->c;
#if 0 #if 0
...@@ -397,13 +397,10 @@ static int __bch2_alloc_write_key(struct btree_trans *trans, struct bch_dev *ca, ...@@ -397,13 +397,10 @@ static int __bch2_alloc_write_key(struct btree_trans *trans, struct bch_dev *ca,
bch2_trans_update(trans, BTREE_INSERT_ENTRY(iter, &a->k_i)); bch2_trans_update(trans, BTREE_INSERT_ENTRY(iter, &a->k_i));
ret = bch2_trans_commit(trans, NULL, journal_seq, ret = bch2_trans_commit(trans, NULL, NULL,
BTREE_INSERT_NOCHECK_RW| BTREE_INSERT_NOFAIL|
BTREE_INSERT_NOFAIL| BTREE_INSERT_NOMARK|
BTREE_INSERT_USE_RESERVE| flags);
BTREE_INSERT_USE_ALLOC_RESERVE|
BTREE_INSERT_NOMARK|
flags);
if (ret) if (ret)
return ret; return ret;
...@@ -417,14 +414,12 @@ static int __bch2_alloc_write_key(struct btree_trans *trans, struct bch_dev *ca, ...@@ -417,14 +414,12 @@ static int __bch2_alloc_write_key(struct btree_trans *trans, struct bch_dev *ca,
return 0; return 0;
} }
int bch2_alloc_write(struct bch_fs *c, bool nowait, bool *wrote) int bch2_alloc_write(struct bch_fs *c, unsigned flags, bool *wrote)
{ {
struct bch_dev *ca; struct bch_dev *ca;
unsigned i; unsigned i;
int ret = 0; int ret = 0;
*wrote = false;
for_each_rw_member(ca, c, i) { for_each_rw_member(ca, c, i) {
struct btree_trans trans; struct btree_trans trans;
struct btree_iter *iter; struct btree_iter *iter;
...@@ -445,10 +440,8 @@ int bch2_alloc_write(struct bch_fs *c, bool nowait, bool *wrote) ...@@ -445,10 +440,8 @@ int bch2_alloc_write(struct bch_fs *c, bool nowait, bool *wrote)
if (!buckets->b[b].mark.dirty) if (!buckets->b[b].mark.dirty)
continue; continue;
ret = __bch2_alloc_write_key(&trans, ca, b, iter, NULL, ret = __bch2_alloc_write_key(&trans, ca, b,
nowait iter, flags);
? BTREE_INSERT_NOWAIT
: 0);
if (ret) if (ret)
break; break;
...@@ -1683,7 +1676,10 @@ int bch2_fs_allocator_start(struct bch_fs *c) ...@@ -1683,7 +1676,10 @@ int bch2_fs_allocator_start(struct bch_fs *c)
* XXX: it's possible for this to deadlock waiting on journal reclaim, * XXX: it's possible for this to deadlock waiting on journal reclaim,
* since we're holding btree writes. What then? * since we're holding btree writes. What then?
*/ */
ret = bch2_alloc_write(c, true, &wrote); ret = bch2_alloc_write(c,
BTREE_INSERT_NOCHECK_RW|
BTREE_INSERT_USE_ALLOC_RESERVE|
BTREE_INSERT_NOWAIT, &wrote);
/* /*
* If bch2_alloc_write() did anything, it may have used some * If bch2_alloc_write() did anything, it may have used some
......
...@@ -65,7 +65,7 @@ void bch2_dev_allocator_quiesce(struct bch_fs *, struct bch_dev *); ...@@ -65,7 +65,7 @@ void bch2_dev_allocator_quiesce(struct bch_fs *, struct bch_dev *);
void bch2_dev_allocator_stop(struct bch_dev *); void bch2_dev_allocator_stop(struct bch_dev *);
int bch2_dev_allocator_start(struct bch_dev *); int bch2_dev_allocator_start(struct bch_dev *);
int bch2_alloc_write(struct bch_fs *, bool, bool *); int bch2_alloc_write(struct bch_fs *, unsigned, bool *);
int bch2_fs_allocator_start(struct bch_fs *); int bch2_fs_allocator_start(struct bch_fs *);
void bch2_fs_allocator_background_init(struct bch_fs *); void bch2_fs_allocator_background_init(struct bch_fs *);
......
...@@ -1194,7 +1194,7 @@ static int __bch2_stripe_write_key(struct btree_trans *trans, ...@@ -1194,7 +1194,7 @@ static int __bch2_stripe_write_key(struct btree_trans *trans,
BTREE_INSERT_NOFAIL|flags); BTREE_INSERT_NOFAIL|flags);
} }
int bch2_stripes_write(struct bch_fs *c, bool *wrote) int bch2_stripes_write(struct bch_fs *c, unsigned flags, bool *wrote)
{ {
struct btree_trans trans; struct btree_trans trans;
struct btree_iter *iter; struct btree_iter *iter;
...@@ -1216,7 +1216,7 @@ int bch2_stripes_write(struct bch_fs *c, bool *wrote) ...@@ -1216,7 +1216,7 @@ int bch2_stripes_write(struct bch_fs *c, bool *wrote)
continue; continue;
ret = __bch2_stripe_write_key(&trans, iter, m, giter.pos, ret = __bch2_stripe_write_key(&trans, iter, m, giter.pos,
new_key, BTREE_INSERT_NOCHECK_RW); new_key, flags);
if (ret) if (ret)
break; break;
......
...@@ -151,7 +151,7 @@ void bch2_ec_stop_dev(struct bch_fs *, struct bch_dev *); ...@@ -151,7 +151,7 @@ void bch2_ec_stop_dev(struct bch_fs *, struct bch_dev *);
void bch2_ec_flush_new_stripes(struct bch_fs *); void bch2_ec_flush_new_stripes(struct bch_fs *);
int bch2_stripes_read(struct bch_fs *, struct list_head *); int bch2_stripes_read(struct bch_fs *, struct list_head *);
int bch2_stripes_write(struct bch_fs *, bool *); int bch2_stripes_write(struct bch_fs *, unsigned, bool *);
int bch2_ec_mem_alloc(struct bch_fs *, bool); int bch2_ec_mem_alloc(struct bch_fs *, bool);
......
...@@ -196,13 +196,15 @@ static void __bch2_fs_read_only(struct bch_fs *c) ...@@ -196,13 +196,15 @@ static void __bch2_fs_read_only(struct bch_fs *c)
goto allocator_not_running; goto allocator_not_running;
do { do {
ret = bch2_stripes_write(c, &wrote); wrote = false;
ret = bch2_stripes_write(c, BTREE_INSERT_NOCHECK_RW, &wrote);
if (ret) { if (ret) {
bch2_fs_inconsistent(c, "error writing out stripes"); bch2_fs_inconsistent(c, "error writing out stripes");
break; break;
} }
ret = bch2_alloc_write(c, false, &wrote); ret = bch2_alloc_write(c, BTREE_INSERT_NOCHECK_RW, &wrote);
if (ret) { if (ret) {
bch2_fs_inconsistent(c, "error writing out alloc info %i", ret); bch2_fs_inconsistent(c, "error writing out alloc info %i", ret);
break; break;
...@@ -305,7 +307,9 @@ void bch2_fs_read_only(struct bch_fs *c) ...@@ -305,7 +307,9 @@ void bch2_fs_read_only(struct bch_fs *c)
if (!bch2_journal_error(&c->journal) && if (!bch2_journal_error(&c->journal) &&
!test_bit(BCH_FS_ERROR, &c->flags) && !test_bit(BCH_FS_ERROR, &c->flags) &&
!test_bit(BCH_FS_EMERGENCY_RO, &c->flags) && !test_bit(BCH_FS_EMERGENCY_RO, &c->flags) &&
test_bit(BCH_FS_STARTED, &c->flags)) test_bit(BCH_FS_STARTED, &c->flags) &&
!c->opts.noreplay &&
!c->opts.norecovery)
bch2_fs_mark_clean(c); bch2_fs_mark_clean(c);
clear_bit(BCH_FS_RW, &c->flags); clear_bit(BCH_FS_RW, &c->flags);
......
...@@ -502,7 +502,7 @@ STORE(__bch2_fs) ...@@ -502,7 +502,7 @@ STORE(__bch2_fs)
if (attr == &sysfs_trigger_alloc_write) { if (attr == &sysfs_trigger_alloc_write) {
bool wrote; bool wrote;
bch2_alloc_write(c, false, &wrote); bch2_alloc_write(c, 0, &wrote);
} }
if (attr == &sysfs_prune_cache) { if (attr == &sysfs_prune_cache) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment