bcache: Add btree_node_write_sync()
More refactoring - mostly making the interfaces more explicit about what we actually want to do. Signed-off-by: Kent Overstreet <kmo@daterainc.com>
This commit is contained in:
parent
0eacac2203
commit
f269af5a07
1 changed files with 16 additions and 19 deletions
|
@ -474,6 +474,15 @@ void bch_btree_node_write(struct btree *b, struct closure *parent)
|
||||||
bch_bset_init_next(b);
|
bch_bset_init_next(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void bch_btree_node_write_sync(struct btree *b)
|
||||||
|
{
|
||||||
|
struct closure cl;
|
||||||
|
|
||||||
|
closure_init_stack(&cl);
|
||||||
|
bch_btree_node_write(b, &cl);
|
||||||
|
closure_sync(&cl);
|
||||||
|
}
|
||||||
|
|
||||||
static void btree_node_write_work(struct work_struct *w)
|
static void btree_node_write_work(struct work_struct *w)
|
||||||
{
|
{
|
||||||
struct btree *b = container_of(to_delayed_work(w), struct btree, work);
|
struct btree *b = container_of(to_delayed_work(w), struct btree, work);
|
||||||
|
@ -655,10 +664,8 @@ static int mca_reap(struct btree *b, unsigned min_order, bool flush)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (btree_node_dirty(b)) {
|
if (btree_node_dirty(b))
|
||||||
bch_btree_node_write(b, &cl);
|
bch_btree_node_write_sync(b);
|
||||||
closure_sync(&cl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* wait for any in flight btree write */
|
/* wait for any in flight btree write */
|
||||||
closure_wait_event(&b->io.wait, &cl,
|
closure_wait_event(&b->io.wait, &cl,
|
||||||
|
@ -1411,9 +1418,6 @@ static int bch_btree_gc_root(struct btree *b, struct btree_op *op,
|
||||||
struct btree *n = NULL;
|
struct btree *n = NULL;
|
||||||
unsigned keys = 0;
|
unsigned keys = 0;
|
||||||
int ret = 0, stale = btree_gc_mark_node(b, &keys, gc);
|
int ret = 0, stale = btree_gc_mark_node(b, &keys, gc);
|
||||||
struct closure cl;
|
|
||||||
|
|
||||||
closure_init_stack(&cl);
|
|
||||||
|
|
||||||
if (b->level || stale > 10)
|
if (b->level || stale > 10)
|
||||||
n = btree_node_alloc_replacement(b);
|
n = btree_node_alloc_replacement(b);
|
||||||
|
@ -1424,12 +1428,10 @@ static int bch_btree_gc_root(struct btree *b, struct btree_op *op,
|
||||||
if (b->level)
|
if (b->level)
|
||||||
ret = btree_gc_recurse(b, op, writes, gc);
|
ret = btree_gc_recurse(b, op, writes, gc);
|
||||||
|
|
||||||
if (!b->written || btree_node_dirty(b)) {
|
if (!b->written || btree_node_dirty(b))
|
||||||
bch_btree_node_write(b, n ? &cl : NULL);
|
bch_btree_node_write_sync(b);
|
||||||
}
|
|
||||||
|
|
||||||
if (!IS_ERR_OR_NULL(n)) {
|
if (!IS_ERR_OR_NULL(n)) {
|
||||||
closure_sync(&cl);
|
|
||||||
bch_btree_set_root(b);
|
bch_btree_set_root(b);
|
||||||
btree_node_free(n);
|
btree_node_free(n);
|
||||||
rw_unlock(true, b);
|
rw_unlock(true, b);
|
||||||
|
@ -2104,15 +2106,10 @@ static int bch_btree_insert_node(struct btree *b, struct btree_op *op,
|
||||||
|
|
||||||
if (bch_btree_insert_keys(b, op, insert_keys,
|
if (bch_btree_insert_keys(b, op, insert_keys,
|
||||||
replace_key)) {
|
replace_key)) {
|
||||||
if (!b->level) {
|
if (!b->level)
|
||||||
bch_btree_leaf_dirty(b, journal_ref);
|
bch_btree_leaf_dirty(b, journal_ref);
|
||||||
} else {
|
else
|
||||||
struct closure cl;
|
bch_btree_node_write_sync(b);
|
||||||
|
|
||||||
closure_init_stack(&cl);
|
|
||||||
bch_btree_node_write(b, &cl);
|
|
||||||
closure_sync(&cl);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (!bch_keylist_empty(&split_keys));
|
} while (!bch_keylist_empty(&split_keys));
|
||||||
|
|
Loading…
Add table
Reference in a new issue