From 0c99e17d3bd3b60ee7461cb8e87ff6badf228422 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sun, 10 Dec 2023 19:26:30 -0500 Subject: bcachefs: growable btree_paths XXX: we're allocating memory with btree locks held - bad We need to plumb through an error path so we can do allocate_dropping_locks() - but we're merging this now because it fixes a transaction path overflow caused by indirect extent fragmentation, and the resize path is rare. Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_types.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'fs/bcachefs/btree_types.h') diff --git a/fs/bcachefs/btree_types.h b/fs/bcachefs/btree_types.h index e4ebfc25df8e..d530307046f4 100644 --- a/fs/bcachefs/btree_types.h +++ b/fs/bcachefs/btree_types.h @@ -358,7 +358,8 @@ struct btree_insert_entry { unsigned long ip_allocated; }; -#define BTREE_ITER_MAX 64 +#define BTREE_ITER_INITIAL 64 +#define BTREE_ITER_MAX (1U << 10) struct btree_trans_commit_hook; typedef int (btree_trans_commit_hook_fn)(struct btree_trans *, struct btree_trans_commit_hook *); @@ -382,7 +383,7 @@ struct btree_trans { unsigned long *paths_allocated; struct btree_path *paths; - u8 *sorted; + btree_path_idx_t *sorted; struct btree_insert_entry *updates; void *mem; @@ -438,11 +439,11 @@ struct btree_trans { struct list_head list; struct closure ref; - unsigned long _paths_allocated[BITS_TO_LONGS(BTREE_ITER_MAX)]; + unsigned long _paths_allocated[BITS_TO_LONGS(BTREE_ITER_INITIAL)]; struct btree_trans_paths trans_paths; - struct btree_path _paths[BTREE_ITER_MAX]; - u8 _sorted[BTREE_ITER_MAX + 8]; - struct btree_insert_entry _updates[BTREE_ITER_MAX]; + struct btree_path _paths[BTREE_ITER_INITIAL]; + btree_path_idx_t _sorted[BTREE_ITER_INITIAL + 4]; + struct btree_insert_entry _updates[BTREE_ITER_INITIAL]; }; static inline struct btree_path *btree_iter_path(struct btree_trans *trans, struct btree_iter *iter) -- cgit v1.2.3