summaryrefslogtreecommitdiff
path: root/libbcache/btree_update.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2016-10-03 19:22:17 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2017-02-28 03:05:38 -0900
commita5b5eba7f788bb77cf57f9c94f3474a2d439ab0b (patch)
tree278813d1b1a9024174531376d41a2ba04a3b27f6 /libbcache/btree_update.c
parente4d1c93d85a5b86c04599bfc9f658308d741fd41 (diff)
New on disk format - encryption
Diffstat (limited to 'libbcache/btree_update.c')
-rw-r--r--libbcache/btree_update.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/libbcache/btree_update.c b/libbcache/btree_update.c
index 95406a44..c3bb2092 100644
--- a/libbcache/btree_update.c
+++ b/libbcache/btree_update.c
@@ -12,7 +12,7 @@
#include "extents.h"
#include "journal.h"
#include "keylist.h"
-#include "super.h"
+#include "super-io.h"
#include <linux/random.h>
#include <linux/sort.h>
@@ -80,7 +80,7 @@ bool bch_btree_node_format_fits(struct cache_set *c, struct btree *b,
{
size_t u64s = btree_node_u64s_with_format(b, new_f);
- return __set_bytes(b->data, u64s) < btree_bytes(c);
+ return __vstruct_bytes(struct btree_node, u64s) < btree_bytes(c);
}
/* Btree node freeing/allocation: */
@@ -298,8 +298,11 @@ static struct btree *bch_btree_node_alloc(struct cache_set *c,
bch_bset_init_first(b, &b->data->keys);
memset(&b->nr, 0, sizeof(b->nr));
- b->data->magic = cpu_to_le64(bset_magic(&c->disk_sb));
- SET_BSET_BTREE_LEVEL(&b->data->keys, level);
+ b->data->magic = cpu_to_le64(bset_magic(c));
+ b->data->flags = 0;
+ SET_BTREE_NODE_ID(b->data, id);
+ SET_BTREE_NODE_LEVEL(b->data, level);
+ b->data->ptr = bkey_i_to_extent(&b->key)->v.start->ptr;
bch_btree_build_aux_trees(b);
@@ -1292,7 +1295,7 @@ static struct btree *__btree_split_node(struct btree_iter *iter, struct btree *n
*/
k = set1->start;
while (1) {
- if (bkey_next(k) == bset_bkey_last(set1))
+ if (bkey_next(k) == vstruct_last(set1))
break;
if (k->_data - set1->_data >= (le16_to_cpu(set1->u64s) * 3) / 5)
break;
@@ -1313,7 +1316,7 @@ static struct btree *__btree_split_node(struct btree_iter *iter, struct btree *n
n2->data->min_key =
btree_type_successor(n1->btree_id, n1->key.k.p);
- set2->u64s = cpu_to_le16((u64 *) bset_bkey_last(set1) - (u64 *) k);
+ set2->u64s = cpu_to_le16((u64 *) vstruct_end(set1) - (u64 *) k);
set1->u64s = cpu_to_le16(le16_to_cpu(set1->u64s) - le16_to_cpu(set2->u64s));
set_btree_bset_end(n1, n1->set);
@@ -1333,7 +1336,7 @@ static struct btree *__btree_split_node(struct btree_iter *iter, struct btree *n
BUG_ON(!set2->u64s);
memcpy_u64s(set2->start,
- bset_bkey_last(set1),
+ vstruct_end(set1),
le16_to_cpu(set2->u64s));
btree_node_reset_sib_u64s(n1);
@@ -1393,12 +1396,12 @@ static void btree_split_insert_keys(struct btree_iter *iter, struct btree *b,
*/
i = btree_bset_first(b);
p = i->start;
- while (p != bset_bkey_last(i))
+ while (p != vstruct_last(i))
if (bkey_deleted(p)) {
le16_add_cpu(&i->u64s, -p->u64s);
set_btree_bset_end(b, b->set);
memmove_u64s_down(p, bkey_next(p),
- (u64 *) bset_bkey_last(i) -
+ (u64 *) vstruct_last(i) -
(u64 *) p);
} else
p = bkey_next(p);
@@ -1428,9 +1431,7 @@ static void btree_split(struct btree *b, struct btree_iter *iter,
if (b->level)
btree_split_insert_keys(iter, n1, insert_keys, reserve);
- if (__set_blocks(n1->data,
- le16_to_cpu(n1->data->keys.u64s),
- block_bytes(c)) > BTREE_SPLIT_THRESHOLD(c)) {
+ if (vstruct_blocks(n1->data, c->block_bits) > BTREE_SPLIT_THRESHOLD(c)) {
trace_bcache_btree_node_split(c, b, b->nr.live_u64s);
n2 = __btree_split_node(iter, n1, reserve);
@@ -1939,7 +1940,7 @@ retry:
u64s = 0;
trans_for_each_entry(trans, i)
if (!i->done)
- u64s += jset_u64s(i->k->k.u64s);
+ u64s += jset_u64s(i->k->k.u64s + i->extra_res);
memset(&trans->journal_res, 0, sizeof(trans->journal_res));
@@ -1966,7 +1967,7 @@ retry:
* written one
*/
if (!i->done) {
- u64s += i->k->k.u64s;
+ u64s += i->k->k.u64s + i->extra_res;
if (!bch_btree_node_insert_fits(c,
i->iter->nodes[0], u64s)) {
split = i->iter;
@@ -2217,7 +2218,7 @@ int bch_btree_update(struct cache_set *c, enum btree_id id,
int bch_btree_delete_range(struct cache_set *c, enum btree_id id,
struct bpos start,
struct bpos end,
- u64 version,
+ struct bversion version,
struct disk_reservation *disk_res,
struct extent_insert_hook *hook,
u64 *journal_seq)