bcachefs: Run insert triggers before overwrite triggers
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 27 Oct 2021 16:51:12 +0000 (12:51 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:17 +0000 (17:09 -0400)
commitf0c3f88b35e1fac6e3b7cec5635e43d4e595cf7a
tree276359de487f2b7d3c5d0243db913fb1f86d6a34
parentc714614bd06cc422f56c02475adf03dc618bf385
bcachefs: Run insert triggers before overwrite triggers

Currently, btree triggers are run in natural key order, which presents a
problem for fallocate in INSERT_RANGE mode: since we're moving existing
extents to higher offsets, the trigger for deleting the old extent runs
before the trigger that adds the new extent, potentially leading to
indirect extents being deleted that shouldn't be when the delete causes
the refcount to hit 0.

This changes the order we run triggers so that for a givin btree, we run
all insert triggers before overwrite triggers, nicely sidestepping this
issue.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_types.h
fs/bcachefs/btree_update_leaf.c
fs/bcachefs/buckets.c
fs/bcachefs/buckets.h