* [tytso-ext4:pu 4/50] fs/ext4/xattr-test.c:1531:13: warning: stack frame size (2912) exceeds limit (2048) in 'test_xattr_credits_usage_expand_and_delete'
@ 2026-11-12 8:29 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-11-12 8:29 UTC (permalink / raw)
To: Theodore Ts'o; +Cc: oe-kbuild-all, linux-ext4
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git pu
head: 246d715a48c25a74ac372dda5e10d8f69f89b50a
commit: 64b5dfde9364204d0284d8800174ba8bb23d963f [4/50] ext4: add KUnit tests for fs/ext4/xattr.c
config: loongarch-allyesconfig (https://download.01.org/0day-ci/archive/20261112/202611120955.8LvZI7rV-lkp@intel.com/config)
compiler: clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261112/202611120955.8LvZI7rV-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202611120955.8LvZI7rV-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> fs/ext4/xattr-test.c:1531:13: warning: stack frame size (2912) exceeds limit (2048) in 'test_xattr_credits_usage_expand_and_delete' [-Wframe-larger-than]
1531 | static void test_xattr_credits_usage_expand_and_delete(struct kunit *test)
| ^
1 warning generated.
vim +/test_xattr_credits_usage_expand_and_delete +1531 fs/ext4/xattr-test.c
1526
1527 /*
1528 * Test 10: ext4_get_inode_usage(), credit calculation, handle credit check,
1529 * ext4_expand_extra_isize_ea(), and ext4_xattr_delete_inode().
1530 */
> 1531 static void test_xattr_credits_usage_expand_and_delete(struct kunit *test)
1532 {
1533 struct xattr_test_ctx *ctx = test->priv;
1534 struct inode *inode = &ctx->primary.ei.vfs_inode;
1535 struct ext4_inode *raw = (struct ext4_inode *)ctx->primary.raw_buf;
1536 journal_t fake_journal = {
1537 .j_revoke_records_per_block = 64,
1538 };
1539 handle_t fake_handle = {
1540 .h_reserved = 1,
1541 .h_journal = &fake_journal,
1542 .h_total_credits = 1,
1543 };
1544 const size_t large_len = 1000;
1545 char *large_val;
1546 char val28[28];
1547 char buf[64];
1548 qsize_t usage = 0;
1549 int credits_create, credits_replace, credits_out = -1;
1550 int ret;
1551
1552 large_val = kunit_kmalloc(test, large_len, GFP_KERNEL);
1553 KUNIT_ASSERT_NOT_NULL(test, large_val);
1554 memset(large_val, 'L', large_len);
1555
1556 /*
1557 * 1. Credit calculation and insufficient handle credits check
1558 */
1559 credits_create = __ext4_xattr_set_credits(&ctx->sb, inode, NULL,
1560 100, true);
1561 KUNIT_EXPECT_GT(test, credits_create, 0);
1562
1563 ext4_set_feature_ea_inode(&ctx->sb);
1564 credits_create = __ext4_xattr_set_credits(&ctx->sb, inode, NULL,
1565 1500, true);
1566 credits_replace = __ext4_xattr_set_credits(&ctx->sb, inode, NULL,
1567 1500, false);
1568 KUNIT_EXPECT_GT(test, credits_replace, credits_create);
1569
1570 /* Without a journal (s_journal == NULL), credits_out is 0 */
1571 ret = ext4_xattr_set_credits(inode, 1500, true, &credits_out);
1572 KUNIT_EXPECT_EQ(test, ret, 0);
1573 KUNIT_EXPECT_EQ(test, credits_out, 0);
1574
1575 /* With s_journal set, ext4_xattr_set_credits() returns credits_create */
1576 ctx->sbi.s_journal = &fake_journal;
1577 ret = ext4_xattr_set_credits(inode, 1500, true, &credits_out);
1578 ctx->sbi.s_journal = NULL;
1579 KUNIT_EXPECT_EQ(test, ret, 0);
1580 KUNIT_EXPECT_EQ(test, credits_out, credits_create);
1581
1582 /* Handle with only 1 buffer credit (< credits) fails with -ENOSPC */
1583 ret = ext4_xattr_set_handle(&fake_handle, inode, EXT4_XATTR_INDEX_USER,
1584 "k", "v", 1, XATTR_CREATE);
1585 KUNIT_EXPECT_EQ(test, ret, -ENOSPC);
1586
1587 /*
1588 * 2. ext4_expand_extra_isize_ea():
1589 * Put "keep" (4B -> 24B total) and "evict" (28B -> 52B total) in
1590 * ibody (88B usable, leaving 12B free).
1591 * First expand i_extra_isize from 32 -> 40 (8 bytes <= 12B free):
1592 * shifts ibody entries in-place without allocating an external block.
1593 * Then expand i_extra_isize from 40 -> 72 (32 bytes > 4B free):
1594 * "keep" (24 + 4 = 28 < 32) is too small alone, so "evict" (52 + 4 >= 32)
1595 * is moved to an external xattr block while "keep" stays in ibody!
1596 */
1597 ext4_clear_feature_ea_inode(&ctx->sb);
1598 ret = ext4_xattr_set(inode, EXT4_XATTR_INDEX_USER, "keep",
1599 "1234", 4, XATTR_CREATE);
1600 KUNIT_ASSERT_EQ(test, ret, 0);
1601 memset(val28, 'E', sizeof(val28));
1602 ret = ext4_xattr_set(inode, EXT4_XATTR_INDEX_USER, "evict",
1603 val28, sizeof(val28), XATTR_CREATE);
1604 KUNIT_ASSERT_EQ(test, ret, 0);
1605 KUNIT_EXPECT_EQ(test, EXT4_I(inode)->i_file_acl, 0ULL);
1606
1607 /* In-place ibody shift (32 -> 40) */
1608 ret = ext4_expand_extra_isize_ea(inode, 40, raw, NULL);
1609 KUNIT_ASSERT_EQ(test, ret, 0);
1610 KUNIT_EXPECT_EQ(test, EXT4_I(inode)->i_extra_isize, (u16)40);
1611 KUNIT_EXPECT_EQ(test, EXT4_I(inode)->i_file_acl, 0ULL);
1612
1613 /* Eviction of "evict" to external block (40 -> 72) */
1614 ret = ext4_expand_extra_isize_ea(inode, 72, raw, NULL);
1615 KUNIT_ASSERT_EQ(test, ret, 0);
1616 KUNIT_EXPECT_EQ(test, EXT4_I(inode)->i_extra_isize, (u16)72);
1617 KUNIT_EXPECT_NE(test, EXT4_I(inode)->i_file_acl, 0ULL);
1618
1619 /* Both "keep" (in ibody) and "evict" (in external block) remain readable */
1620 KUNIT_EXPECT_EQ(test,
1621 ext4_xattr_ibody_get(inode, EXT4_XATTR_INDEX_USER,
1622 "keep", buf, sizeof(buf)),
1623 4);
1624 KUNIT_EXPECT_EQ(test,
1625 ext4_xattr_get(inode, EXT4_XATTR_INDEX_USER,
1626 "evict", buf, sizeof(buf)),
1627 28);
1628
1629 /*
1630 * 3. ext4_get_inode_usage() and ext4_xattr_delete_inode():
1631 * Add a 1000-byte EA inode attribute ("large_ea") and check that
1632 * ext4_get_inode_usage() accounts for 1 (parent inode) + 1 (EA inode)
1633 * = 2 inodes, and ext4_xattr_delete_inode() frees the external block
1634 * and drops the EA inode reference to 0.
1635 */
1636 ext4_set_feature_ea_inode(&ctx->sb);
1637 ret = ext4_xattr_set(inode, EXT4_XATTR_INDEX_USER, "large_ea",
1638 large_val, large_len, XATTR_CREATE);
1639 KUNIT_ASSERT_EQ(test, ret, 0);
1640
1641 down_read(&EXT4_I(inode)->xattr_sem);
1642 ret = ext4_get_inode_usage(inode, &usage);
1643 up_read(&EXT4_I(inode)->xattr_sem);
1644 KUNIT_ASSERT_EQ(test, ret, 0);
1645 KUNIT_EXPECT_EQ(test, usage, (qsize_t)2);
1646
1647 ret = ext4_xattr_delete_inode(NULL, inode, 0);
1648 KUNIT_ASSERT_EQ(test, ret, 0);
1649 KUNIT_EXPECT_EQ(test, EXT4_I(inode)->i_file_acl, 0ULL);
1650 KUNIT_EXPECT_EQ(test, ctx->ea_inodes[0].ei.vfs_inode.i_nlink, 0U);
1651 }
1652
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-11-12 8:30 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-12 8:29 [tytso-ext4:pu 4/50] fs/ext4/xattr-test.c:1531:13: warning: stack frame size (2912) exceeds limit (2048) in 'test_xattr_credits_usage_expand_and_delete' kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox