fs/file.c:947:31: sparse: sparse: incorrect type in argument 1 (different address spaces)

From: kernel test robot
Date: Mon Jan 08 2024 - 18:47:47 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 5db8752c3b81bd33a549f6f812bab81e3bb61b20
commit: 61d4fb0b349ec1b33119913c3b0bd109de30142c file, i915: fix file reference for mmap_singleton()
date: 3 months ago
config: x86_64-randconfig-123-20240106 (https://download.01.org/0day-ci/archive/20240109/202401090732.whbm84HZ-lkp@xxxxxxxxx/config)
compiler: ClangBuiltLinux clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240109/202401090732.whbm84HZ-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202401090732.whbm84HZ-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
fs/file.c:379:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file **old_fds @@ got struct file [noderef] __rcu **fd @@
fs/file.c:379:17: sparse: expected struct file **old_fds
fs/file.c:379:17: sparse: got struct file [noderef] __rcu **fd
fs/file.c:380:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file **new_fds @@ got struct file [noderef] __rcu **fd @@
fs/file.c:380:17: sparse: expected struct file **new_fds
fs/file.c:380:17: sparse: got struct file [noderef] __rcu **fd
fs/file.c:395:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
fs/file.c:395:17: sparse: struct file [noderef] __rcu *
fs/file.c:395:17: sparse: struct file *
fs/file.c:430:54: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct file *file @@ got struct file [noderef] __rcu *[assigned] __ret @@
fs/file.c:470:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct fdtable [noderef] __rcu *fdt @@ got struct fdtable * @@
fs/file.c:649:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *file @@ got struct file [noderef] __rcu * @@
fs/file.c:844:30: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *file @@ got struct file [noderef] __rcu * @@
fs/file.c:865:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file [noderef] __rcu *file @@ got struct file * @@
fs/file.c:869:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct atomic64_t [usertype] *v @@ got struct atomic64_t [noderef] __rcu * @@
fs/file.c:872:23: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file [noderef] __rcu *file_reloaded @@ got struct file * @@
fs/file.c:895:24: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected struct file * @@ got struct file [noderef] __rcu *file_reloaded @@
fs/file.c:897:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct file * @@ got struct file [noderef] __rcu *file @@
fs/file.c:918:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file [noderef] __rcu *file @@ got struct file * @@
fs/file.c:925:24: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected struct file * @@ got struct file [noderef] __rcu *file @@
>> fs/file.c:947:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct file [noderef] __rcu **f @@ got struct file **f @@
fs/file.c:947:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file [noderef] __rcu *file @@ got struct file * @@
>> fs/file.c:951:16: sparse: sparse: incorrect type in return expression (different address spaces) @@ expected struct file * @@ got struct file [noderef] __rcu *[assigned] file @@
fs/file.c:1240:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *tofree @@ got struct file [noderef] __rcu * @@

vim +947 fs/file.c

929
930 /**
931 * get_file_active - try go get a reference to a file
932 * @f: the file to get a reference on
933 *
934 * In contast to get_file_rcu() the pointer itself isn't part of the
935 * reference counting.
936 *
937 * This function should rarely have to be used and only by users who
938 * understand the implications of SLAB_TYPESAFE_BY_RCU. Try to avoid it.
939 *
940 * Return: Returns @f with the reference count increased or NULL.
941 */
942 struct file *get_file_active(struct file **f)
943 {
944 struct file __rcu *file;
945
946 rcu_read_lock();
> 947 file = __get_file_rcu(f);
948 rcu_read_unlock();
949 if (IS_ERR(file))
950 file = NULL;
> 951 return file;
952 }
953 EXPORT_SYMBOL_GPL(get_file_active);
954

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