diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-10-04 16:22:31 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2019-10-04 16:22:37 -0400 |
commit | b540b170c9c277ffc5bdaf6b05e21c30f142dfc9 (patch) | |
tree | 5102655960f4f342386e9734afd219633300f9d2 /libbcachefs/extents.c | |
parent | 7f69c4161c31b8f43723a9ccad1a9a358f4e2e70 (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.c | 28 |
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) |