[PATCH] btrfs: fix stack size warning in btrfs_test_delayed_refs()

From: Arnd Bergmann
Date: Thu Dec 12 2024 - 10:38:13 EST


From: Arnd Bergmann <arnd@xxxxxxxx>

The newly added code has a btrfs_transaction structure on the stack,
which makes it somewhat too large for 32-bit kernels:

fs/btrfs/tests/delayed-refs-tests.c: In function 'btrfs_test_delayed_refs':
fs/btrfs/tests/delayed-refs-tests.c:1012:1: error: the frame size of 1088 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
1012 | }
| ^

Change this to a dynamic allocation instead.

Fixes: fa3dda44871b ("btrfs: selftests: add delayed ref self test cases")
Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
---
fs/btrfs/tests/delayed-refs-tests.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/tests/delayed-refs-tests.c b/fs/btrfs/tests/delayed-refs-tests.c
index 9b469791c20a..86333521b94a 100644
--- a/fs/btrfs/tests/delayed-refs-tests.c
+++ b/fs/btrfs/tests/delayed-refs-tests.c
@@ -978,7 +978,6 @@ static int select_delayed_refs_test(struct btrfs_trans_handle *trans)

int btrfs_test_delayed_refs(u32 sectorsize, u32 nodesize)
{
- struct btrfs_transaction transaction;
struct btrfs_trans_handle trans;
struct btrfs_fs_info *fs_info;
int ret;
@@ -991,8 +990,10 @@ int btrfs_test_delayed_refs(u32 sectorsize, u32 nodesize)
return -ENOMEM;
}
btrfs_init_dummy_trans(&trans, fs_info);
- btrfs_init_dummy_transaction(&transaction, fs_info);
- trans.transaction = &transaction;
+ trans.transaction = kmalloc(sizeof(*trans.transaction), GFP_KERNEL);
+ if (!trans.transaction)
+ goto out;
+ btrfs_init_dummy_transaction(trans.transaction, fs_info);

ret = simple_tests(&trans);
if (!ret) {
@@ -1007,6 +1008,8 @@ int btrfs_test_delayed_refs(u32 sectorsize, u32 nodesize)

if (!ret)
ret = select_delayed_refs_test(&trans);
+ kfree(trans.transaction);
+out:
btrfs_free_dummy_fs_info(fs_info);
return ret;
}
--
2.39.5