summaryrefslogtreecommitdiff
path: root/libbcachefs/extents.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-10-04 16:22:31 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2019-10-04 16:22:37 -0400
commitb540b170c9c277ffc5bdaf6b05e21c30f142dfc9 (patch)
tree5102655960f4f342386e9734afd219633300f9d2 /libbcachefs/extents.c
parent7f69c4161c31b8f43723a9ccad1a9a358f4e2e70 (diff)
Update bcachefs sources to cddca21efc bcachefs: Don't use sha256 for siphash str hash key
Diffstat (limited to 'libbcachefs/extents.c')
-rw-r--r--libbcachefs/extents.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/libbcachefs/extents.c b/libbcachefs/extents.c
index dfddb8ce..1b86d27e 100644
--- a/libbcachefs/extents.c
+++ b/libbcachefs/extents.c
@@ -953,7 +953,7 @@ static int count_iters_for_insert(struct btree_trans *trans,
if (*nr_iters >= max_iters) {
*end = bpos_min(*end, k.k->p);
- return 0;
+ ret = 1;
}
break;
@@ -991,6 +991,7 @@ static int count_iters_for_insert(struct btree_trans *trans,
pos.offset += r_k.k->p.offset - idx;
*end = bpos_min(*end, pos);
+ ret = 1;
break;
}
}
@@ -1003,6 +1004,8 @@ static int count_iters_for_insert(struct btree_trans *trans,
return ret;
}
+#define EXTENT_ITERS_MAX (BTREE_ITER_MAX / 3)
+
int bch2_extent_atomic_end(struct btree_iter *iter,
struct bkey_i *insert,
struct bpos *end)
@@ -1011,22 +1014,20 @@ int bch2_extent_atomic_end(struct btree_iter *iter,
struct btree *b = iter->l[0].b;
struct btree_node_iter node_iter = iter->l[0].iter;
struct bkey_packed *_k;
- unsigned nr_iters =
- bch2_bkey_nr_alloc_ptrs(bkey_i_to_s_c(insert));
- int ret = 0;
+ unsigned nr_iters = 0;
+ int ret;
BUG_ON(iter->uptodate > BTREE_ITER_NEED_PEEK);
BUG_ON(bkey_cmp(bkey_start_pos(&insert->k), b->data->min_key) < 0);
*end = bpos_min(insert->k.p, b->key.k.p);
- ret = count_iters_for_insert(trans, bkey_i_to_s_c(insert),
- 0, end, &nr_iters, 10, false);
- if (ret)
+ ret = count_iters_for_insert(trans, bkey_i_to_s_c(insert), 0, end,
+ &nr_iters, EXTENT_ITERS_MAX / 2, false);
+ if (ret < 0)
return ret;
- while (nr_iters < 20 &&
- (_k = bch2_btree_node_iter_peek_filter(&node_iter, b,
+ while ((_k = bch2_btree_node_iter_peek_filter(&node_iter, b,
KEY_TYPE_discard))) {
struct bkey unpacked;
struct bkey_s_c k = bkey_disassemble(b, _k, &unpacked);
@@ -1040,18 +1041,15 @@ int bch2_extent_atomic_end(struct btree_iter *iter,
offset = bkey_start_offset(&insert->k) -
bkey_start_offset(k.k);
- ret = count_iters_for_insert(trans, k, offset,
- end, &nr_iters, 20, true);
+ ret = count_iters_for_insert(trans, k, offset, end,
+ &nr_iters, EXTENT_ITERS_MAX, true);
if (ret)
- return ret;
-
- if (nr_iters >= 20)
break;
bch2_btree_node_iter_advance(&node_iter, b);
}
- return 0;
+ return ret < 0 ? ret : 0;
}
int bch2_extent_trim_atomic(struct bkey_i *k, struct btree_iter *iter)