btrfs: tree-check: reduce stack consumption in check_dir_item
David Sterba
maintainerPATCH 1/1 btrfs: tree-check: reduce stack consumption in check_dir_item
I've noticed that the updated item checker stack consumption increased dramatically in 542f5385e20cf97447 ("btrfs: tree-checker: Add checker for dir item")
tree-checker.c:check_leaf +552 (176 -> 728)
The array is 255 bytes long, dynamic allocation would slow down the sanity checks so it's more reasonable to keep it on-stack. Moving the variable to the scope of use reduces the stack usage again
tree-checker.c:check_leaf -264 (728 -> 464)
--- fs/btrfs/tree-checker.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/btrfs/tree-checker.c +2 -1
@@ -259,7 +259,6 @@ static int check_dir_item(struct btrfs_root *root, di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item);while (cur < item_size) { -char namebuf[max (BTRFS_NAME_LEN ,XATTR_NAME_MAX )];u32 name_len;u32 data_len;u32 max_name_len;
@@ -342,6 +341,8 @@ static int check_dir_item(struct btrfs_root *root,*/ if (key->type ==BTRFS_DIR_ITEM_KEY || key->type ==BTRFS_XATTR_ITEM_KEY ) { +char namebuf[max (BTRFS_NAME_LEN ,XATTR_NAME_MAX )]; +read_extent_buffer (leaf, namebuf, (unsigned long )(di +1 ), name_len); name_hash =btrfs_name_hash (namebuf, name_len);
Signature · 1 line
2.15.1
Quoted 6 lines · David Sterba
I've noticed that the updated item checker stack consumption increased dramatically in
542f5385e20cf97447("btrfs: tree-checker: Add checker for dir item")tree-checker.c:check_leaf +552 (176 -> 728)
Quoted 7 lines
The array is 255 bytes long, dynamic allocation would slow down the sanity checks so it's more reasonable to keep it on-stack. Moving the variable to the scope of use reduces the stack usage again
tree-checker.c:check_leaf -264 (728 -> 464)
Signed-off-by David Sterba <[email protected]>
Thanks,
Josef
Quoted 6 lines · David Sterba
I've noticed that the updated item checker stack consumption increased dramatically in
542f5385e20cf97447("btrfs: tree-checker: Add checker for dir item")tree-checker.c:check_leaf +552 (176 -> 728)
Quoted 7 lines
The array is 255 bytes long, dynamic allocation would slow down the sanity checks so it's more reasonable to keep it on-stack. Moving the variable to the scope of use reduces the stack usage again
tree-checker.c:check_leaf -264 (728 -> 464)
Signed-off-by David Sterba <[email protected]>
Thanks,
Qu
Quoted 26 lines
--- fs/btrfs/tree-checker.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)fs/btrfs/tree-checker.c +2
-1@@ -259,7 +259,6 @@ static int check_dir_item(struct btrfs_root *root, di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item);while (cur < item_size) { -char namebuf[max (BTRFS_NAME_LEN ,XATTR_NAME_MAX )];u32 name_len;u32 data_len;u32 max_name_len;@@ -342,6 +341,8 @@ static int check_dir_item(struct btrfs_root *root,*/ if (key->type ==BTRFS_DIR_ITEM_KEY || key->type ==BTRFS_XATTR_ITEM_KEY ) { +char namebuf[max (BTRFS_NAME_LEN ,XATTR_NAME_MAX )]; +read_extent_buffer (leaf, namebuf, (unsigned long )(di +1 ), name_len); name_hash =btrfs_name_hash (namebuf, name_len);