diff options
-rw-r--r-- | drivers/md/bcache/btree.c | 23 | ||||
-rw-r--r-- | drivers/md/bcache/journal.c | 16 | ||||
-rw-r--r-- | drivers/md/bcache/journal.h | 8 |
3 files changed, 20 insertions, 27 deletions
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index a8e1aa5c1732..8356a24b3fb2 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -1511,7 +1511,7 @@ static void bch_btree_set_root(struct btree *b) if (res.ref) { closure_init_stack(&cl); bch_journal_set_dirty(c); - bch_journal_res_put(c, &res, &cl, NULL); + bch_journal_res_put(c, &res, &cl); closure_sync(&cl); } @@ -1855,10 +1855,10 @@ void bch_btree_insert_and_journal(struct btree *b, } } - if (res->ref) - btree_bset_last(b)->journal_seq = - bch_journal_add_keys(c, res, b->btree_id, - insert, b->level); + if (res->ref) { + bch_journal_add_keys(c, res, b->btree_id, insert, b->level); + btree_bset_last(b)->journal_seq = c->journal.seq; + } } /** @@ -2035,8 +2035,11 @@ bch_btree_insert_keys(struct btree *b, break; if (btree_insert_key(iter, b, insert_keys, - replace, &res, flags)) + replace, &res, flags)) { inserted = true; + if (journal_seq) + *journal_seq = iter->c->journal.seq; + } } six_unlock_write(&b->lock); @@ -2044,7 +2047,7 @@ bch_btree_insert_keys(struct btree *b, if (res.ref) bch_journal_res_put(iter->c, &res, bch_keylist_empty(insert_keys) - ? persistent : NULL, journal_seq); + ? persistent : NULL); } if (inserted && b->written) { @@ -2222,9 +2225,9 @@ static int btree_split(struct btree *b, * old node, but not the node we just created, mark it: */ six_lock_write(&b->lock); - if (gc_will_visit_node(b->c, n2) && - !gc_will_visit_node(b->c, n1)) - btree_gc_mark_node(b->c, n1, NULL); + if (gc_will_visit_node(iter->c, n2) && + !gc_will_visit_node(iter->c, n1)) + btree_gc_mark_node(iter->c, n1, NULL); six_unlock_write(&b->lock); } else { trace_bcache_btree_node_compact(b, set1->u64s); diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c index c616eb4caa59..76a4404f5e62 100644 --- a/drivers/md/bcache/journal.c +++ b/drivers/md/bcache/journal.c @@ -1453,15 +1453,10 @@ static void journal_write_work(struct work_struct *work) */ void bch_journal_res_put(struct cache_set *c, struct journal_res *res, - struct closure *parent, - u64 *journal_seq) + struct closure *parent) { spin_lock_irq(&c->journal.lock); - /* Set under journal lock */ - if (journal_seq) - *journal_seq = c->journal.seq; - BUG_ON(!res->ref); c->journal.u64s_remaining += res->nkeys; @@ -1570,26 +1565,21 @@ void bch_journal_set_dirty(struct cache_set *c) msecs_to_jiffies(c->journal.delay_ms)); } -u64 bch_journal_add_keys(struct cache_set *c, struct journal_res *res, +void bch_journal_add_keys(struct cache_set *c, struct journal_res *res, enum btree_id id, const struct bkey_i *k, unsigned level) { unsigned actual = jset_u64s(k->k.u64s); - u64 seq; BUG_ON(!res->ref); BUG_ON(actual > res->nkeys); res->nkeys -= actual; spin_lock_irq(&c->journal.lock); - seq = c->journal.seq; - bch_journal_add_entry(c->journal.cur->data, k, k->k.u64s, JKEYS_BTREE_KEYS, id, level); bch_journal_set_dirty(c); spin_unlock_irq(&c->journal.lock); - - return seq; } void bch_journal_meta(struct cache_set *c, struct closure *parent) @@ -1605,7 +1595,7 @@ void bch_journal_meta(struct cache_set *c, struct closure *parent) bch_journal_res_get(c, &res, u64s, u64s); if (res.ref) { bch_journal_set_dirty(c); - bch_journal_res_put(c, &res, parent, NULL); + bch_journal_res_put(c, &res, parent); } } diff --git a/drivers/md/bcache/journal.h b/drivers/md/bcache/journal.h index 48eaafe01e8e..afc81d1362ec 100644 --- a/drivers/md/bcache/journal.h +++ b/drivers/md/bcache/journal.h @@ -195,13 +195,13 @@ struct journal_res { }; void bch_journal_res_put(struct cache_set *, struct journal_res *, - struct closure *, u64 *); + struct closure *); void bch_journal_res_get(struct cache_set *, struct journal_res *, unsigned, unsigned); void bch_journal_set_dirty(struct cache_set *); -u64 bch_journal_add_keys(struct cache_set *, struct journal_res *, - enum btree_id, const struct bkey_i *, - unsigned); +void bch_journal_add_keys(struct cache_set *, struct journal_res *, + enum btree_id, const struct bkey_i *, + unsigned); /* * Amount of space that will be taken up by some keys in the journal (i.e. |