aboutsummaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_types.h
diff options
context:
space:
mode:
authorGravatar Kent Overstreet <kent.overstreet@gmail.com> 2021-10-27 12:51:12 -0400
committerGravatar Kent Overstreet <kent.overstreet@linux.dev> 2023-10-22 17:09:17 -0400
commitf0c3f88b35e1fac6e3b7cec5635e43d4e595cf7a (patch)
tree276359de487f2b7d3c5d0243db913fb1f86d6a34 /fs/bcachefs/btree_types.h
parentbcachefs: Disk space accounting fix on brand-new fs (diff)
downloadlinux-f0c3f88b35e1fac6e3b7cec5635e43d4e595cf7a.tar.gz
linux-f0c3f88b35e1fac6e3b7cec5635e43d4e595cf7a.tar.bz2
linux-f0c3f88b35e1fac6e3b7cec5635e43d4e595cf7a.zip
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>
Diffstat (limited to 'fs/bcachefs/btree_types.h')
-rw-r--r--fs/bcachefs/btree_types.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_types.h b/fs/bcachefs/btree_types.h
index 5331626e62a5..25b0df22366b 100644
--- a/fs/bcachefs/btree_types.h
+++ b/fs/bcachefs/btree_types.h
@@ -338,7 +338,8 @@ struct btree_insert_entry {
enum btree_id btree_id:8;
u8 level;
bool cached:1;
- bool trans_triggers_run:1;
+ bool insert_trigger_run:1;
+ bool overwrite_trigger_run:1;
struct bkey_i *k;
struct btree_path *path;
unsigned long ip_allocated;