Hi Ethan,

kernel test robot noticed the following build errors:

[auto build test ERROR on 5723cc3450bccf7f98f227b9723b5c9f6b3af1c5]

url:    
https://github.com/intel-lab-lkp/linux/commits/Ethan-Carter-Edwards/ext4-replace-strcpy-with-assignment/20250519-115601
base:   5723cc3450bccf7f98f227b9723b5c9f6b3af1c5
patch link:    
https://lore.kernel.org/r/20250518-ext4-strcpy-v2-1-80d316325046%40ethancedwards.com
patch subject: [PATCH v2] ext4: replace strcpy() with '.' assignment
config: csky-randconfig-002-20250519 
(https://download.01.org/0day-ci/archive/20250519/[email protected]/config)
compiler: csky-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): 
(https://download.01.org/0day-ci/archive/20250519/[email protected]/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 <[email protected]>
| Closes: 
https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

   fs/ext4/inline.c: In function 'ext4_inlinedir_to_tree':
>> fs/ext4/inline.c:1317:38: error: assignment to 'char' from 'char *' makes 
>> integer from pointer without a cast [-Wint-conversion]
    1317 |                         fake.name[0] = ".";
         |                                      ^
   fs/ext4/inline.c:1327:53: error: assignment to 'char' from 'char *' makes 
integer from pointer without a cast [-Wint-conversion]
    1327 |                         fake.name[0] = fake.name[1] = ".";
         |                                                     ^


vim +1317 fs/ext4/inline.c

  1259  
  1260  /*
  1261   * This function fills a red-black tree with information from an
  1262   * inlined dir.  It returns the number directory entries loaded
  1263   * into the tree.  If there is an error it is returned in err.
  1264   */
  1265  int ext4_inlinedir_to_tree(struct file *dir_file,
  1266                             struct inode *dir, ext4_lblk_t block,
  1267                             struct dx_hash_info *hinfo,
  1268                             __u32 start_hash, __u32 start_minor_hash,
  1269                             int *has_inline_data)
  1270  {
  1271          int err = 0, count = 0;
  1272          unsigned int parent_ino;
  1273          int pos;
  1274          struct ext4_dir_entry_2 *de;
  1275          struct inode *inode = file_inode(dir_file);
  1276          int ret, inline_size = 0;
  1277          struct ext4_iloc iloc;
  1278          void *dir_buf = NULL;
  1279          struct ext4_dir_entry_2 fake;
  1280          struct fscrypt_str tmp_str;
  1281  
  1282          ret = ext4_get_inode_loc(inode, &iloc);
  1283          if (ret)
  1284                  return ret;
  1285  
  1286          down_read(&EXT4_I(inode)->xattr_sem);
  1287          if (!ext4_has_inline_data(inode)) {
  1288                  up_read(&EXT4_I(inode)->xattr_sem);
  1289                  *has_inline_data = 0;
  1290                  goto out;
  1291          }
  1292  
  1293          inline_size = ext4_get_inline_size(inode);
  1294          dir_buf = kmalloc(inline_size, GFP_NOFS);
  1295          if (!dir_buf) {
  1296                  ret = -ENOMEM;
  1297                  up_read(&EXT4_I(inode)->xattr_sem);
  1298                  goto out;
  1299          }
  1300  
  1301          ret = ext4_read_inline_data(inode, dir_buf, inline_size, &iloc);
  1302          up_read(&EXT4_I(inode)->xattr_sem);
  1303          if (ret < 0)
  1304                  goto out;
  1305  
  1306          pos = 0;
  1307          parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 
*)dir_buf)->inode);
  1308          while (pos < inline_size) {
  1309                  /*
  1310                   * As inlined dir doesn't store any information about 
'.' and
  1311                   * only the inode number of '..' is stored, we have to 
handle
  1312                   * them differently.
  1313                   */
  1314                  if (pos == 0) {
  1315                          fake.inode = cpu_to_le32(inode->i_ino);
  1316                          fake.name_len = 1;
> 1317                          fake.name[0] = ".";
  1318                          fake.rec_len = ext4_rec_len_to_disk(
  1319                                            
ext4_dir_rec_len(fake.name_len, NULL),
  1320                                            inline_size);
  1321                          ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
  1322                          de = &fake;
  1323                          pos = EXT4_INLINE_DOTDOT_OFFSET;
  1324                  } else if (pos == EXT4_INLINE_DOTDOT_OFFSET) {
  1325                          fake.inode = cpu_to_le32(parent_ino);
  1326                          fake.name_len = 2;
  1327                          fake.name[0] = fake.name[1] = ".";
  1328                          fake.rec_len = ext4_rec_len_to_disk(
  1329                                            
ext4_dir_rec_len(fake.name_len, NULL),
  1330                                            inline_size);
  1331                          ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
  1332                          de = &fake;
  1333                          pos = EXT4_INLINE_DOTDOT_SIZE;
  1334                  } else {
  1335                          de = (struct ext4_dir_entry_2 *)(dir_buf + pos);
  1336                          pos += ext4_rec_len_from_disk(de->rec_len, 
inline_size);
  1337                          if (ext4_check_dir_entry(inode, dir_file, de,
  1338                                           iloc.bh, dir_buf,
  1339                                           inline_size, pos)) {
  1340                                  ret = count;
  1341                                  goto out;
  1342                          }
  1343                  }
  1344  
  1345                  if (ext4_hash_in_dirent(dir)) {
  1346                          hinfo->hash = EXT4_DIRENT_HASH(de);
  1347                          hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de);
  1348                  } else {
  1349                          err = ext4fs_dirhash(dir, de->name, 
de->name_len, hinfo);
  1350                          if (err) {
  1351                                  ret = err;
  1352                                  goto out;
  1353                          }
  1354                  }
  1355                  if ((hinfo->hash < start_hash) ||
  1356                      ((hinfo->hash == start_hash) &&
  1357                       (hinfo->minor_hash < start_minor_hash)))
  1358                          continue;
  1359                  if (de->inode == 0)
  1360                          continue;
  1361                  tmp_str.name = de->name;
  1362                  tmp_str.len = de->name_len;
  1363                  err = ext4_htree_store_dirent(dir_file, hinfo->hash,
  1364                                                hinfo->minor_hash, de, 
&tmp_str);
  1365                  if (err) {
  1366                          ret = err;
  1367                          goto out;
  1368                  }
  1369                  count++;
  1370          }
  1371          ret = count;
  1372  out:
  1373          kfree(dir_buf);
  1374          brelse(iloc.bh);
  1375          return ret;
  1376  }
  1377  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Reply via email to