diff options
-rw-r--r-- | drivers/md/bcache/btree_update.c | 7 | ||||
-rw-r--r-- | drivers/md/bcache/journal.h | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/drivers/md/bcache/btree_update.c b/drivers/md/bcache/btree_update.c index 5797023f104c..3290849370bb 100644 --- a/drivers/md/bcache/btree_update.c +++ b/drivers/md/bcache/btree_update.c @@ -730,7 +730,8 @@ void bch_btree_journal_key(struct btree_iter *iter, if (test_bit(JOURNAL_REPLAY_DONE, &j->flags)) { bch_journal_add_keys(j, res, b->btree_id, insert); - btree_bset_last(b)->journal_seq = cpu_to_le64(j->seq); + btree_bset_last(b)->journal_seq = + cpu_to_le64(bch_journal_res_seq(j, res)); } if (!btree_node_dirty(b)) { @@ -994,8 +995,6 @@ void bch_btree_interior_update_will_free_node(struct cache_set *c, struct pending_btree_node_free *d; struct bset_tree *t; - mutex_lock(&c->btree_interior_update_lock); - /* * Does this node have data that hasn't been written in the journal? * @@ -1022,6 +1021,8 @@ void bch_btree_interior_update_will_free_node(struct cache_set *c, &b->writes[1].journal, &as->journal, NULL); + mutex_lock(&c->btree_interior_update_lock); + /* * Does this node have any btree_interior_update operations preventing * it from being written? diff --git a/drivers/md/bcache/journal.h b/drivers/md/bcache/journal.h index 6a37de1b0ff3..2dfb1a7ebba4 100644 --- a/drivers/md/bcache/journal.h +++ b/drivers/md/bcache/journal.h @@ -152,6 +152,13 @@ u64 bch_inode_journal_seq(struct journal *, u64); void bch_journal_add_keys(struct journal *, struct journal_res *, enum btree_id, const struct bkey_i *); +static inline u64 bch_journal_res_seq(struct journal *j, + struct journal_res *res) +{ + struct journal_buf *buf = &j->buf[res->idx]; + + return le64_to_cpu(buf->data->seq); +} void bch_journal_res_put(struct journal *, struct journal_res *, u64 *); int bch_journal_res_get(struct journal *, struct journal_res *, |