diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2016-06-08 05:35:32 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-18 21:39:38 -0900 |
commit | 901e4ccdfad38cc657e4d1cd43321ff59edfbf15 (patch) | |
tree | 03b417f37caf25486cd1666579af01d4e511c4dd | |
parent | 823307690d287ec03dd9c07fb29802310fae9b13 (diff) |
bcache: rename jkeys -> journal_entry
-rw-r--r-- | drivers/md/bcache/journal.c | 168 | ||||
-rw-r--r-- | include/uapi/linux/bcache.h | 10 |
2 files changed, 99 insertions, 79 deletions
diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c index b64c601e8eae..8592e10384be 100644 --- a/drivers/md/bcache/journal.c +++ b/drivers/md/bcache/journal.c @@ -46,33 +46,50 @@ static inline u64 journal_pin_seq(struct journal *j, return last_seq(j) + fifo_entry_idx(&j->pin, pin_list); } -#define for_each_jset_jkeys(jkeys, jset) \ - for (jkeys = (jset)->start; \ - jkeys < (struct jset_entry *) bkey_idx(jset, le32_to_cpu((jset)->u64s));\ - jkeys = jset_keys_next(jkeys)) - -#define for_each_jset_key(k, _n, jkeys, jset) \ - for_each_jset_jkeys(jkeys, jset) \ - if (JKEYS_TYPE(jkeys) == JKEYS_BTREE_KEYS) \ - for (k = (jkeys)->start; \ - (k < bkey_idx(jkeys, le16_to_cpu((jkeys)->u64s)) &&\ - (_n = bkey_next(k), 1)); \ - k = _n) +#define for_each_jset_entry(entry, jset) \ + for (entry = (jset)->start; \ + entry < bkey_idx(jset, le32_to_cpu((jset)->u64s));\ + entry = jset_keys_next(entry)) + +static inline struct jset_entry *__jset_entry_type_next(struct jset *jset, + struct jset_entry *entry, unsigned type) +{ + while (entry < bkey_idx(jset, le32_to_cpu(jset->u64s))) { + if (JOURNAL_ENTRY_TYPE(entry) == type) + return entry; + + entry = jset_keys_next(entry); + } + + return NULL; +} + +#define for_each_jset_entry_type(entry, jset, type) \ + for (entry = (jset)->start; \ + (entry = __jset_entry_type_next(jset, entry, type)); \ + entry = jset_keys_next(entry)) + +#define for_each_jset_key(k, _n, entry, jset) \ + for_each_jset_entry_type(entry, jset, JOURNAL_ENTRY_BTREE_KEYS) \ + for (k = (entry)->start; \ + (k < bkey_idx(entry, le16_to_cpu((entry)->u64s)) &&\ + (_n = bkey_next(k), 1)); \ + k = _n) static inline void bch_journal_add_entry_at(struct journal_buf *buf, const void *data, size_t u64s, unsigned type, enum btree_id id, unsigned level, unsigned offset) { - struct jset_entry *jkeys = bkey_idx(buf->data, offset); + struct jset_entry *entry = bkey_idx(buf->data, offset); - jkeys->u64s = cpu_to_le16(u64s); - jkeys->btree_id = id; - jkeys->level = level; - jkeys->flags = 0; - SET_JKEYS_TYPE(jkeys, type); + entry->u64s = cpu_to_le16(u64s); + entry->btree_id = id; + entry->level = level; + entry->flags = 0; + SET_JOURNAL_ENTRY_TYPE(entry, type); - memcpy(jkeys->_data, data, u64s * sizeof(u64)); + memcpy(entry->_data, data, u64s * sizeof(u64)); } static inline void bch_journal_add_entry(struct journal_buf *buf, @@ -88,13 +105,13 @@ static inline void bch_journal_add_entry(struct journal_buf *buf, } static struct jset_entry *bch_journal_find_entry(struct jset *j, unsigned type, - enum btree_id id) + enum btree_id id) { - struct jset_entry *jkeys; + struct jset_entry *entry; - for_each_jset_jkeys(jkeys, j) - if (JKEYS_TYPE(jkeys) == type && jkeys->btree_id == id) - return jkeys; + for_each_jset_entry_type(entry, j, type) + if (entry->btree_id == id) + return entry; return NULL; } @@ -103,22 +120,22 @@ struct bkey_i *bch_journal_find_btree_root(struct cache_set *c, struct jset *j, enum btree_id id, unsigned *level) { struct bkey_i *k; - struct jset_entry *jkeys = - bch_journal_find_entry(j, JKEYS_BTREE_ROOT, id); + struct jset_entry *entry = + bch_journal_find_entry(j, JOURNAL_ENTRY_BTREE_ROOT, id); - if (!jkeys) + if (!entry) return NULL; - k = jkeys->start; - *level = jkeys->level; + k = entry->start; + *level = entry->level; - if (cache_set_inconsistent_on(!jkeys->u64s || - le16_to_cpu(jkeys->u64s) != k->k.u64s || + if (cache_set_inconsistent_on(!entry->u64s || + le16_to_cpu(entry->u64s) != k->k.u64s || bkey_invalid(c, BKEY_TYPE_BTREE, bkey_i_to_s_c(k)), c, "invalid btree root in journal")) return NULL; - *level = jkeys->level; + *level = entry->level; return k; } @@ -126,7 +143,8 @@ static void bch_journal_add_btree_root(struct journal_buf *buf, enum btree_id id, struct bkey_i *k, unsigned level) { - bch_journal_add_entry(buf, k, k->k.u64s, JKEYS_BTREE_ROOT, id, level); + bch_journal_add_entry(buf, k, k->k.u64s, + JOURNAL_ENTRY_BTREE_ROOT, id, level); } static inline void bch_journal_add_prios(struct journal *j, @@ -140,7 +158,7 @@ static inline void bch_journal_add_prios(struct journal *j, return; bch_journal_add_entry(buf, j->prio_buckets, j->nr_prio_buckets, - JKEYS_PRIO_PTRS, 0, 0); + JOURNAL_ENTRY_PRIO_PTRS, 0, 0); } static void journal_seq_blacklist_flush(struct journal_entry_pin *pin) @@ -676,22 +694,21 @@ static int journal_seq_blacklist_read(struct cache_set *c, struct journal_seq_blacklist *bl; u64 seq; - for_each_jset_jkeys(entry, &i->j) - switch (JKEYS_TYPE(entry)) { - case JKEYS_JOURNAL_SEQ_BLACKLISTED: - seq = entry->_data[0]; - bl = bch_journal_seq_blacklisted_new(c, seq); - if (!bl) { - mutex_unlock(&c->journal.blacklist_lock); - return -ENOMEM; - } + for_each_jset_entry_type(entry, &i->j, + JOURNAL_ENTRY_JOURNAL_SEQ_BLACKLISTED) { + seq = entry->_data[0]; - journal_pin_add(&c->journal, p, &bl->pin, - journal_seq_blacklist_flush); - bl->written = true; - break; + bl = bch_journal_seq_blacklisted_new(c, seq); + if (!bl) { + mutex_unlock(&c->journal.blacklist_lock); + return -ENOMEM; } + journal_pin_add(&c->journal, p, &bl->pin, + journal_seq_blacklist_flush); + bl->written = true; + } + return 0; } @@ -732,25 +749,27 @@ const char *bch_journal_read(struct cache_set *c, struct list_head *list) /* Swabbing: */ list_for_each_entry(i, list, list) { - struct jset_entry *jkeys; + struct jset_entry *entry; struct bkey_i *k; - if (JSET_BIG_ENDIAN(&i->j) != CPU_BIG_ENDIAN) - for_each_jset_jkeys(jkeys, &i->j) - switch (JKEYS_TYPE(jkeys)) { - case JKEYS_BTREE_KEYS: - for (k = jkeys->start; - k < bkey_idx(jkeys, le16_to_cpu(jkeys->u64s)); - k = bkey_next(k)) - bch_bkey_swab(bkey_type(jkeys->level, - jkeys->btree_id), - NULL, bkey_to_packed(k)); - break; - case JKEYS_BTREE_ROOT: - bch_bkey_swab(BKEY_TYPE_BTREE, - NULL, bkey_to_packed(jkeys->start)); - break; - } + if (JSET_BIG_ENDIAN(&i->j) == CPU_BIG_ENDIAN) + continue; + + for_each_jset_entry(entry, &i->j) + switch (JOURNAL_ENTRY_TYPE(entry)) { + case JOURNAL_ENTRY_BTREE_KEYS: + for (k = entry->start; + k < bkey_idx(entry, le16_to_cpu(entry->u64s)); + k = bkey_next(k)) + bch_bkey_swab(bkey_type(entry->level, + entry->btree_id), + NULL, bkey_to_packed(k)); + break; + case JOURNAL_ENTRY_BTREE_ROOT: + bch_bkey_swab(BKEY_TYPE_BTREE, + NULL, bkey_to_packed(entry->start)); + break; + } } j = &list_entry(list->prev, struct journal_replay, list)->j; @@ -792,7 +811,7 @@ const char *bch_journal_read(struct cache_set *c, struct list_head *list) mutex_unlock(&c->journal.blacklist_lock); - prio_ptrs = bch_journal_find_entry(j, JKEYS_PRIO_PTRS, 0); + prio_ptrs = bch_journal_find_entry(j, JOURNAL_ENTRY_PRIO_PTRS, 0); if (!prio_ptrs) { /* * there weren't any prio bucket ptrs yet... XXX should change @@ -1144,8 +1163,8 @@ void bch_journal_start(struct cache_set *c) list_for_each_entry(bl, &j->seq_blacklist, list) if (!bl->written) { bch_journal_add_entry(journal_cur_buf(j), &bl->seq, 1, - JKEYS_JOURNAL_SEQ_BLACKLISTED, - 0, 0); + JOURNAL_ENTRY_JOURNAL_SEQ_BLACKLISTED, + 0, 0); journal_pin_add(j, &fifo_back(&j->pin), &bl->pin, journal_seq_blacklist_flush); @@ -1162,7 +1181,7 @@ int bch_journal_replay(struct cache_set *c, struct list_head *list) int ret = 0, keys = 0, entries = 0; struct journal *j = &c->journal; struct bkey_i *k, *_n; - struct jset_entry *jkeys; + struct jset_entry *entry; struct journal_replay *i, *n; u64 cur_seq = last_seq(j); u64 end_seq = le64_to_cpu(list_last_entry(list, struct journal_replay, @@ -1194,10 +1213,10 @@ int bch_journal_replay(struct cache_set *c, struct list_head *list) (j->seq - le64_to_cpu(i->j.seq))) & j->pin.mask)]; - for_each_jset_key(k, _n, jkeys, &i->j) { + for_each_jset_key(k, _n, entry, &i->j) { trace_bcache_journal_replay_key(&k->k); - ret = bch_btree_insert(c, jkeys->btree_id, k, + ret = bch_btree_insert(c, entry->btree_id, k, NULL, NULL, NULL, BTREE_INSERT_NOFAIL| BTREE_INSERT_NO_MARK_KEY); @@ -1546,8 +1565,8 @@ static void journal_write_compact(struct jset *jset) if (prev && i->btree_id == prev->btree_id && i->level == prev->level && - JKEYS_TYPE(i) == JKEYS_TYPE(prev) && - JKEYS_TYPE(i) == JKEYS_BTREE_KEYS) { + JOURNAL_ENTRY_TYPE(i) == JOURNAL_ENTRY_TYPE(prev) && + JOURNAL_ENTRY_TYPE(i) == JOURNAL_ENTRY_BTREE_KEYS) { memmove(jset_keys_next(prev), i->_data, u64s * sizeof(u64)); @@ -1743,7 +1762,8 @@ void bch_journal_add_keys(struct journal *j, struct journal_res *res, BUG_ON(actual > res->u64s); bch_journal_add_entry_at(&j->buf[res->idx], k, k->k.u64s, - JKEYS_BTREE_KEYS, id, level, res->offset); + JOURNAL_ENTRY_BTREE_KEYS, id, + level, res->offset); res->offset += actual; res->u64s -= actual; @@ -1765,7 +1785,7 @@ void bch_journal_res_put(struct journal *j, struct journal_res *res, unsigned actual = jset_u64s(0); bch_journal_add_entry_at(&j->buf[res->idx], NULL, 0, - JKEYS_BTREE_KEYS, + JOURNAL_ENTRY_BTREE_KEYS, 0, 0, res->offset); res->offset += actual; res->u64s -= actual; diff --git a/include/uapi/linux/bcache.h b/include/uapi/linux/bcache.h index 8f75dfc71eb5..1019f125f880 100644 --- a/include/uapi/linux/bcache.h +++ b/include/uapi/linux/bcache.h @@ -982,11 +982,11 @@ struct jset_entry { #define JSET_KEYS_U64s (sizeof(struct jset_entry) / sizeof(__u64)) -LE32_BITMASK(JKEYS_TYPE, struct jset_entry, flags, 0, 8); +LE32_BITMASK(JOURNAL_ENTRY_TYPE, struct jset_entry, flags, 0, 8); enum { - JKEYS_BTREE_KEYS = 0, - JKEYS_BTREE_ROOT = 1, - JKEYS_PRIO_PTRS = 2, + JOURNAL_ENTRY_BTREE_KEYS = 0, + JOURNAL_ENTRY_BTREE_ROOT = 1, + JOURNAL_ENTRY_PRIO_PTRS = 2, /* * Journal sequence numbers can be blacklisted: bsets record the max @@ -998,7 +998,7 @@ enum { * and then record that we skipped it so that the next time we crash and * recover we don't think there was a missing journal entry. */ - JKEYS_JOURNAL_SEQ_BLACKLISTED = 3, + JOURNAL_ENTRY_JOURNAL_SEQ_BLACKLISTED = 3, }; struct jset { |