diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-03-28 07:34:25 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-23 00:08:19 +0300 |
commit | 76a0537bf1286f56266fb899014505cba1e332f4 (patch) | |
tree | d7150c35f9385f19a72c9caf4c394f6abbaf85ea | |
parent | 4afe700060799d0ccf42c9881f3ebfab96953fd8 (diff) | |
download | linux-76a0537bf1286f56266fb899014505cba1e332f4.tar.xz |
bcachefs: Sort updates in bch2_trans_update()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_update.h | 12 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 22 |
2 files changed, 23 insertions, 11 deletions
diff --git a/fs/bcachefs/btree_update.h b/fs/bcachefs/btree_update.h index 879e7ae39586..75ed02874767 100644 --- a/fs/bcachefs/btree_update.h +++ b/fs/bcachefs/btree_update.h @@ -99,19 +99,13 @@ int bch2_btree_node_rewrite(struct bch_fs *c, struct btree_iter *, int bch2_btree_node_update_key(struct bch_fs *, struct btree_iter *, struct btree *, struct bkey_i_btree_ptr *); -static inline void -bch2_trans_update(struct btree_trans *trans, - struct btree_insert_entry entry) -{ - BUG_ON(trans->nr_updates >= trans->nr_iters + 4); - - trans->updates[trans->nr_updates++] = entry; -} - int bch2_trans_commit(struct btree_trans *, struct disk_reservation *, u64 *, unsigned); +struct btree_insert_entry *bch2_trans_update(struct btree_trans *, + struct btree_insert_entry); + #define bch2_trans_do(_c, _journal_seq, _flags, _do) \ ({ \ struct btree_trans trans; \ diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index d345f5a14fde..d4d4329767da 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -809,8 +809,6 @@ int bch2_trans_commit(struct btree_trans *trans, trans->journal_seq = journal_seq; trans->flags = flags; - bubble_sort(trans->updates, trans->nr_updates, btree_trans_cmp); - trans_for_each_update(trans, i) btree_insert_entry_checks(trans, i); bch2_btree_trans_verify_locks(trans); @@ -871,6 +869,26 @@ err: goto out; } +struct btree_insert_entry *bch2_trans_update(struct btree_trans *trans, + struct btree_insert_entry entry) +{ + struct btree_insert_entry *i; + + BUG_ON(trans->nr_updates >= trans->nr_iters + 4); + + for (i = trans->updates; + i < trans->updates + trans->nr_updates; + i++) + if (btree_trans_cmp(entry, *i) < 0) + break; + + memmove(&i[1], &i[0], + (void *) &trans->updates[trans->nr_updates] - (void *) i); + trans->nr_updates++; + *i = entry; + return i; +} + int bch2_btree_delete_at(struct btree_trans *trans, struct btree_iter *iter, unsigned flags) { |