[linux-next:master 728/1207] fs/xfs/xfs_file.c:1266:31: sparse: sparse: incorrect type in return expression (different base types)

From: kernel test robot
Date: Tue Jun 07 2022 - 03:10:12 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 73d0e32571a0786151eb72634f1a4c5891166176
commit: d5f5b32dee7c09e3152cbbce45c73f0b1ea7d94c [728/1207] xfs: support CoW in fsdax mode
config: x86_64-rhel-8.3-kselftests (https://download.01.org/0day-ci/archive/20220607/202206071511.FI7WLdZo-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.3.0-1) 11.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-18-g56afb504-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=d5f5b32dee7c09e3152cbbce45c73f0b1ea7d94c
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout d5f5b32dee7c09e3152cbbce45c73f0b1ea7d94c
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash fs/xfs/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)
>> fs/xfs/xfs_file.c:1266:31: sparse: sparse: incorrect type in return expression (different base types) @@ expected int @@ got restricted vm_fault_t @@
fs/xfs/xfs_file.c:1266:31: sparse: expected int
fs/xfs/xfs_file.c:1266:31: sparse: got restricted vm_fault_t
>> fs/xfs/xfs_file.c:1260:1: sparse: sparse: symbol 'xfs_dax_fault' was not declared. Should it be static?
>> fs/xfs/xfs_file.c:1314:21: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted vm_fault_t [usertype] ret @@ got int @@
fs/xfs/xfs_file.c:1314:21: sparse: expected restricted vm_fault_t [usertype] ret
fs/xfs/xfs_file.c:1314:21: sparse: got int

Please review and possibly fold the followup patch.

vim +1266 fs/xfs/xfs_file.c

1257
1258 #ifdef CONFIG_FS_DAX
1259 int
> 1260 xfs_dax_fault(
1261 struct vm_fault *vmf,
1262 enum page_entry_size pe_size,
1263 bool write_fault,
1264 pfn_t *pfn)
1265 {
> 1266 return dax_iomap_fault(vmf, pe_size, pfn, NULL,
1267 (write_fault && !vmf->cow_page) ?
1268 &xfs_dax_write_iomap_ops :
1269 &xfs_read_iomap_ops);
1270 }
1271 #else
1272 int
1273 xfs_dax_fault(
1274 struct vm_fault *vmf,
1275 enum page_entry_size pe_size,
1276 bool write_fault,
1277 pfn_t *pfn)
1278 {
1279 return 0;
1280 }
1281 #endif
1282
1283 /*
1284 * Locking for serialisation of IO during page faults. This results in a lock
1285 * ordering of:
1286 *
1287 * mmap_lock (MM)
1288 * sb_start_pagefault(vfs, freeze)
1289 * invalidate_lock (vfs/XFS_MMAPLOCK - truncate serialisation)
1290 * page_lock (MM)
1291 * i_lock (XFS - extent map serialisation)
1292 */
1293 static vm_fault_t
1294 __xfs_filemap_fault(
1295 struct vm_fault *vmf,
1296 enum page_entry_size pe_size,
1297 bool write_fault)
1298 {
1299 struct inode *inode = file_inode(vmf->vma->vm_file);
1300 struct xfs_inode *ip = XFS_I(inode);
1301 vm_fault_t ret;
1302
1303 trace_xfs_filemap_fault(ip, pe_size, write_fault);
1304
1305 if (write_fault) {
1306 sb_start_pagefault(inode->i_sb);
1307 file_update_time(vmf->vma->vm_file);
1308 }
1309
1310 if (IS_DAX(inode)) {
1311 pfn_t pfn;
1312
1313 xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED);
> 1314 ret = xfs_dax_fault(vmf, pe_size, write_fault, &pfn);
1315 if (ret & VM_FAULT_NEEDDSYNC)
1316 ret = dax_finish_sync_fault(vmf, pe_size, pfn);
1317 xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED);
1318 } else {
1319 if (write_fault) {
1320 xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED);
1321 ret = iomap_page_mkwrite(vmf,
1322 &xfs_buffered_write_iomap_ops);
1323 xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED);
1324 } else {
1325 ret = filemap_fault(vmf);
1326 }
1327 }
1328
1329 if (write_fault)
1330 sb_end_pagefault(inode->i_sb);
1331 return ret;
1332 }
1333

--
0-DAY CI Kernel Test Service
https://01.org/lkp