summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/md/bcache/btree.c23
-rw-r--r--drivers/md/bcache/journal.c16
-rw-r--r--drivers/md/bcache/journal.h8
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.