* [tytso-ext4:pu 7/50] fs/ext4/inline-test.c:1020 test_readpage_inline_link_and_iomap() warn: passing zero to 'PTR_ERR'
@ 2026-11-12 9:00 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-11-12 9:00 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
Unfiltered warning: this smatch report is sent as-is and has not been
reviewed for false positives, so please treat it with due skepticism.
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-ext4@vger.kernel.org
TO: "Theodore Ts'o" <tytso@mit.edu>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git pu
head: 246d715a48c25a74ac372dda5e10d8f69f89b50a
commit: dd235149d6326ab5c8f8b7622f4ade2671b36cb4 [7/50] ext4: add KUnit tests for fs/ext4/inline.c
:::::: branch date: 16 hours ago
:::::: commit date: 16 hours ago
config: powerpc-randconfig-2200-20261112 (https://download.01.org/0day-ci/archive/20261112/202611120950.nMRMGeTV-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 8621950157210c1fa68f20f0614cb51310ec9dff)
smatch: v0.5.0-9187-g5189e3fb
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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202611120950.nMRMGeTV-lkp@intel.com/
smatch warnings:
fs/ext4/inline-test.c:1020 test_readpage_inline_link_and_iomap() warn: passing zero to 'PTR_ERR'
vim +/PTR_ERR +1020 fs/ext4/inline-test.c
dd235149d6326a Theodore Ts'o 2026-11-05 871
dd235149d6326a Theodore Ts'o 2026-11-05 872 /* =========================================================================
dd235149d6326a Theodore Ts'o 2026-11-05 873 * 3. Reading Inline Data, Symlinks, and iomap Tests
dd235149d6326a Theodore Ts'o 2026-11-05 874 * =========================================================================
dd235149d6326a Theodore Ts'o 2026-11-05 875 */
dd235149d6326a Theodore Ts'o 2026-11-05 876
dd235149d6326a Theodore Ts'o 2026-11-05 877 static void test_readpage_inline_link_and_iomap(struct kunit *test)
dd235149d6326a Theodore Ts'o 2026-11-05 878 {
dd235149d6326a Theodore Ts'o 2026-11-05 879 struct inline_test_ctx *ctx = test->priv;
dd235149d6326a Theodore Ts'o 2026-11-05 880 struct inode *inode = &ctx->ei.vfs_inode;
dd235149d6326a Theodore Ts'o 2026-11-05 881 struct folio *folio;
dd235149d6326a Theodore Ts'o 2026-11-05 882 struct iomap iomap = { 0 };
dd235149d6326a Theodore Ts'o 2026-11-05 883 char content[85];
dd235149d6326a Theodore Ts'o 2026-11-05 884 const char *short_link = "/usr/bin/python3";
dd235149d6326a Theodore Ts'o 2026-11-05 885 char long_link[85];
dd235149d6326a Theodore Ts'o 2026-11-05 886 char *target;
dd235149d6326a Theodore Ts'o 2026-11-05 887 void *kaddr;
dd235149d6326a Theodore Ts'o 2026-11-05 888 int i, ret;
dd235149d6326a Theodore Ts'o 2026-11-05 889
dd235149d6326a Theodore Ts'o 2026-11-05 890 for (i = 0; i < sizeof(content); i++)
dd235149d6326a Theodore Ts'o 2026-11-05 891 content[i] = (char)('0' + (i % 10));
dd235149d6326a Theodore Ts'o 2026-11-05 892
dd235149d6326a Theodore Ts'o 2026-11-05 893 /* 1. ext4_readpage_inline and ext4_inline_data_iomap on non-inline inode -> -EAGAIN */
dd235149d6326a Theodore Ts'o 2026-11-05 894 folio = __filemap_get_folio(&inode->i_data, 0,
dd235149d6326a Theodore Ts'o 2026-11-05 895 FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
dd235149d6326a Theodore Ts'o 2026-11-05 896 GFP_KERNEL);
dd235149d6326a Theodore Ts'o 2026-11-05 897 KUNIT_ASSERT_FALSE(test, IS_ERR(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 898 ret = ext4_readpage_inline(inode, folio);
dd235149d6326a Theodore Ts'o 2026-11-05 899 KUNIT_EXPECT_EQ(test, ret, -EAGAIN);
dd235149d6326a Theodore Ts'o 2026-11-05 900 folio_unlock(folio);
dd235149d6326a Theodore Ts'o 2026-11-05 901 folio_put(folio);
dd235149d6326a Theodore Ts'o 2026-11-05 902
dd235149d6326a Theodore Ts'o 2026-11-05 903 ret = ext4_inline_data_iomap(inode, &iomap);
dd235149d6326a Theodore Ts'o 2026-11-05 904 KUNIT_EXPECT_EQ(test, ret, -EAGAIN);
dd235149d6326a Theodore Ts'o 2026-11-05 905
dd235149d6326a Theodore Ts'o 2026-11-05 906 /* 2. Create 85-byte inline file and test ext4_readpage_inline on index 0 */
dd235149d6326a Theodore Ts'o 2026-11-05 907 truncate_inode_pages(&inode->i_data, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 908 ret = create_inline_file(inode, content, sizeof(content));
dd235149d6326a Theodore Ts'o 2026-11-05 909 KUNIT_ASSERT_EQ(test, ret, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 910 truncate_inode_pages(&inode->i_data, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 911
dd235149d6326a Theodore Ts'o 2026-11-05 912 folio = __filemap_get_folio(&inode->i_data, 0,
dd235149d6326a Theodore Ts'o 2026-11-05 913 FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
dd235149d6326a Theodore Ts'o 2026-11-05 914 GFP_KERNEL);
dd235149d6326a Theodore Ts'o 2026-11-05 915 KUNIT_ASSERT_FALSE(test, IS_ERR(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 916 ret = ext4_readpage_inline(inode, folio);
dd235149d6326a Theodore Ts'o 2026-11-05 917 KUNIT_EXPECT_EQ(test, ret, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 918 KUNIT_EXPECT_TRUE(test, folio_test_uptodate(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 919 KUNIT_EXPECT_FALSE(test, folio_test_locked(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 920
dd235149d6326a Theodore Ts'o 2026-11-05 921 kaddr = kmap_local_folio(folio, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 922 KUNIT_EXPECT_MEMEQ(test, kaddr, content, sizeof(content));
dd235149d6326a Theodore Ts'o 2026-11-05 923 /* Verify zero-padding past inline_size */
dd235149d6326a Theodore Ts'o 2026-11-05 924 KUNIT_EXPECT_EQ(test, ((char *)kaddr)[sizeof(content)], 0);
dd235149d6326a Theodore Ts'o 2026-11-05 925 KUNIT_EXPECT_EQ(test, ((char *)kaddr)[PAGE_SIZE - 1], 0);
dd235149d6326a Theodore Ts'o 2026-11-05 926 kunmap_local(kaddr);
dd235149d6326a Theodore Ts'o 2026-11-05 927 folio_put(folio);
dd235149d6326a Theodore Ts'o 2026-11-05 928
dd235149d6326a Theodore Ts'o 2026-11-05 929 /* 3. ext4_readpage_inline on folio->index > 0 zeros the folio and marks uptodate */
dd235149d6326a Theodore Ts'o 2026-11-05 930 folio = __filemap_get_folio(&inode->i_data, 1,
dd235149d6326a Theodore Ts'o 2026-11-05 931 FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
dd235149d6326a Theodore Ts'o 2026-11-05 932 GFP_KERNEL);
dd235149d6326a Theodore Ts'o 2026-11-05 933 KUNIT_ASSERT_FALSE(test, IS_ERR(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 934 kaddr = kmap_local_folio(folio, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 935 memset(kaddr, 0xff, PAGE_SIZE);
dd235149d6326a Theodore Ts'o 2026-11-05 936 kunmap_local(kaddr);
dd235149d6326a Theodore Ts'o 2026-11-05 937
dd235149d6326a Theodore Ts'o 2026-11-05 938 ret = ext4_readpage_inline(inode, folio);
dd235149d6326a Theodore Ts'o 2026-11-05 939 KUNIT_EXPECT_EQ(test, ret, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 940 KUNIT_EXPECT_TRUE(test, folio_test_uptodate(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 941 kaddr = kmap_local_folio(folio, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 942 KUNIT_EXPECT_EQ(test, ((unsigned char *)kaddr)[0], 0);
dd235149d6326a Theodore Ts'o 2026-11-05 943 kunmap_local(kaddr);
dd235149d6326a Theodore Ts'o 2026-11-05 944 folio_put(folio);
dd235149d6326a Theodore Ts'o 2026-11-05 945
dd235149d6326a Theodore Ts'o 2026-11-05 946 /* 4. ext4_readpage_inline when ext4_get_inode_loc fails -> propagates error */
dd235149d6326a Theodore Ts'o 2026-11-05 947 truncate_inode_pages(&inode->i_data, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 948 ctx->get_inode_loc_err = -EIO;
dd235149d6326a Theodore Ts'o 2026-11-05 949 folio = __filemap_get_folio(&inode->i_data, 0,
dd235149d6326a Theodore Ts'o 2026-11-05 950 FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
dd235149d6326a Theodore Ts'o 2026-11-05 951 GFP_KERNEL);
dd235149d6326a Theodore Ts'o 2026-11-05 952 KUNIT_ASSERT_FALSE(test, IS_ERR(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 953 ret = ext4_readpage_inline(inode, folio);
dd235149d6326a Theodore Ts'o 2026-11-05 954 KUNIT_EXPECT_EQ(test, ret, -EIO);
dd235149d6326a Theodore Ts'o 2026-11-05 955 folio_put(folio);
dd235149d6326a Theodore Ts'o 2026-11-05 956 ctx->get_inode_loc_err = 0;
dd235149d6326a Theodore Ts'o 2026-11-05 957
dd235149d6326a Theodore Ts'o 2026-11-05 958 /*
dd235149d6326a Theodore Ts'o 2026-11-05 959 * 5. ext4_readpage_inline when i_inline_size > PAGE_SIZE -> -EFSCORRUPTED.
dd235149d6326a Theodore Ts'o 2026-11-05 960 * i_inline_size is a u16, so it can only exceed PAGE_SIZE when
dd235149d6326a Theodore Ts'o 2026-11-05 961 * PAGE_SIZE < U16_MAX (e.g. 4KB, 8KB, 16KB, or 32KB base pages).
dd235149d6326a Theodore Ts'o 2026-11-05 962 */
dd235149d6326a Theodore Ts'o 2026-11-05 963 if (PAGE_SIZE < U16_MAX) {
dd235149d6326a Theodore Ts'o 2026-11-05 964 truncate_inode_pages(&inode->i_data, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 965 ctx->ei.i_inline_size = U16_MAX;
dd235149d6326a Theodore Ts'o 2026-11-05 966 i_size_write(inode, U16_MAX);
dd235149d6326a Theodore Ts'o 2026-11-05 967 folio = __filemap_get_folio(&inode->i_data, 0,
dd235149d6326a Theodore Ts'o 2026-11-05 968 FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
dd235149d6326a Theodore Ts'o 2026-11-05 969 GFP_KERNEL);
dd235149d6326a Theodore Ts'o 2026-11-05 970 KUNIT_ASSERT_FALSE(test, IS_ERR(folio));
dd235149d6326a Theodore Ts'o 2026-11-05 971 ret = ext4_readpage_inline(inode, folio);
dd235149d6326a Theodore Ts'o 2026-11-05 972 KUNIT_EXPECT_EQ(test, ret, -EFSCORRUPTED);
dd235149d6326a Theodore Ts'o 2026-11-05 973 folio_put(folio);
dd235149d6326a Theodore Ts'o 2026-11-05 974 ctx->ei.i_inline_size = sizeof(content);
dd235149d6326a Theodore Ts'o 2026-11-05 975 i_size_write(inode, sizeof(content));
dd235149d6326a Theodore Ts'o 2026-11-05 976 }
dd235149d6326a Theodore Ts'o 2026-11-05 977
dd235149d6326a Theodore Ts'o 2026-11-05 978 /* 6. ext4_inline_data_iomap populates IOMAP_INLINE with inline address/len */
dd235149d6326a Theodore Ts'o 2026-11-05 979 memset(&iomap, 0, sizeof(iomap));
dd235149d6326a Theodore Ts'o 2026-11-05 980 ret = ext4_inline_data_iomap(inode, &iomap);
dd235149d6326a Theodore Ts'o 2026-11-05 981 KUNIT_EXPECT_EQ(test, ret, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 982 KUNIT_EXPECT_EQ(test, iomap.type, (u16)IOMAP_INLINE);
dd235149d6326a Theodore Ts'o 2026-11-05 983 KUNIT_EXPECT_EQ(test, iomap.offset, 0ULL);
dd235149d6326a Theodore Ts'o 2026-11-05 984 KUNIT_EXPECT_EQ(test, iomap.length, (u64)sizeof(content));
dd235149d6326a Theodore Ts'o 2026-11-05 985 KUNIT_EXPECT_EQ(test, iomap.addr,
dd235149d6326a Theodore Ts'o 2026-11-05 986 ((u64)ctx->iloc_bh.b_blocknr << TEST_BLOCK_BITS) +
dd235149d6326a Theodore Ts'o 2026-11-05 987 offsetof(struct ext4_inode, i_block));
dd235149d6326a Theodore Ts'o 2026-11-05 988
dd235149d6326a Theodore Ts'o 2026-11-05 989 /* 7. ext4_inline_data_iomap error when ext4_get_inode_loc fails */
dd235149d6326a Theodore Ts'o 2026-11-05 990 ctx->get_inode_loc_err = -EIO;
dd235149d6326a Theodore Ts'o 2026-11-05 991 ret = ext4_inline_data_iomap(inode, &iomap);
dd235149d6326a Theodore Ts'o 2026-11-05 992 KUNIT_EXPECT_EQ(test, ret, -EIO);
dd235149d6326a Theodore Ts'o 2026-11-05 993 ctx->get_inode_loc_err = 0;
dd235149d6326a Theodore Ts'o 2026-11-05 994
dd235149d6326a Theodore Ts'o 2026-11-05 995 /* 8. ext4_read_inline_link: short symlink (in i_block) and long symlink (in xattr) */
dd235149d6326a Theodore Ts'o 2026-11-05 996 reset_inode_state(ctx, S_IFLNK | 0777);
dd235149d6326a Theodore Ts'o 2026-11-05 997 ret = create_inline_file(inode, short_link, strlen(short_link));
dd235149d6326a Theodore Ts'o 2026-11-05 998 KUNIT_ASSERT_EQ(test, ret, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 999
dd235149d6326a Theodore Ts'o 2026-11-05 1000 target = ext4_read_inline_link(inode);
dd235149d6326a Theodore Ts'o 2026-11-05 1001 KUNIT_ASSERT_FALSE(test, IS_ERR(target));
dd235149d6326a Theodore Ts'o 2026-11-05 1002 KUNIT_EXPECT_STREQ(test, target, short_link);
dd235149d6326a Theodore Ts'o 2026-11-05 1003 kfree(target);
dd235149d6326a Theodore Ts'o 2026-11-05 1004
dd235149d6326a Theodore Ts'o 2026-11-05 1005 reset_inode_state(ctx, S_IFLNK | 0777);
dd235149d6326a Theodore Ts'o 2026-11-05 1006 memset(long_link, 'a', sizeof(long_link) - 1);
dd235149d6326a Theodore Ts'o 2026-11-05 1007 long_link[sizeof(long_link) - 1] = '\0';
dd235149d6326a Theodore Ts'o 2026-11-05 1008 ret = create_inline_file(inode, long_link, strlen(long_link));
dd235149d6326a Theodore Ts'o 2026-11-05 1009 KUNIT_ASSERT_EQ(test, ret, 0);
dd235149d6326a Theodore Ts'o 2026-11-05 1010
dd235149d6326a Theodore Ts'o 2026-11-05 1011 target = ext4_read_inline_link(inode);
dd235149d6326a Theodore Ts'o 2026-11-05 1012 KUNIT_ASSERT_FALSE(test, IS_ERR(target));
dd235149d6326a Theodore Ts'o 2026-11-05 1013 KUNIT_EXPECT_STREQ(test, target, long_link);
dd235149d6326a Theodore Ts'o 2026-11-05 1014 kfree(target);
dd235149d6326a Theodore Ts'o 2026-11-05 1015
dd235149d6326a Theodore Ts'o 2026-11-05 1016 /* ext4_read_inline_link error when ext4_get_inode_loc fails */
dd235149d6326a Theodore Ts'o 2026-11-05 1017 ctx->get_inode_loc_err = -EIO;
dd235149d6326a Theodore Ts'o 2026-11-05 1018 target = ext4_read_inline_link(inode);
dd235149d6326a Theodore Ts'o 2026-11-05 1019 KUNIT_EXPECT_TRUE(test, IS_ERR(target));
dd235149d6326a Theodore Ts'o 2026-11-05 @1020 KUNIT_EXPECT_EQ(test, PTR_ERR(target), -EIO);
dd235149d6326a Theodore Ts'o 2026-11-05 1021 ctx->get_inode_loc_err = 0;
dd235149d6326a Theodore Ts'o 2026-11-05 1022 }
dd235149d6326a Theodore Ts'o 2026-11-05 1023
--
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 9:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-12 9:00 [tytso-ext4:pu 7/50] fs/ext4/inline-test.c:1020 test_readpage_inline_link_and_iomap() warn: passing zero to 'PTR_ERR' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.