mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
bcachefs: Sort updates in bch2_trans_update()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
4afe700060
commit
76a0537bf1
2 changed files with 23 additions and 11 deletions
|
@ -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; \
|
||||
|
|
|
@ -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 @@ int bch2_trans_commit(struct btree_trans *trans,
|
|||
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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue