All of lore.kernel.org
 help / color / mirror / Atom feed
* [ceph-client:testing 30/33] fs/ceph/file.c:3195:33: sparse: sparse: invalid initializer
@ 2026-09-08 11:39 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-09-08 11:39 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp

:::::: 
:::::: Manual check reason: "low confidence static check warning: fs/ceph/file.c:3195:33: sparse: sparse: invalid initializer"
:::::: 

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: ceph-devel@vger.kernel.org
TO: Alex Markuze <amarkuze@redhat.com>
CC: Xiubo Li <xiubo.li@clyso.com>

tree:   https://github.com/ceph/ceph-client.git testing
head:   190736464f4572bfb360fd3747fb827493e02e09
commit: 010045293af61944ede36c1626164c0c9cbf52d3 [30/33] ceph: convert VFS data I/O paths to bout
:::::: branch date: 3 days ago
:::::: commit date: 5 days ago
config: nios2-randconfig-r133-20260908 (https://download.01.org/0day-ci/archive/20260908/202609081951.CasBVCLQ-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260908/202609081951.CasBVCLQ-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/r/202609081951.CasBVCLQ-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> fs/ceph/file.c:3195:33: sparse: sparse: invalid initializer
>> fs/ceph/file.c:3195:33: sparse: sparse: invalid initializer
>> fs/ceph/file.c:229:9: sparse: sparse: non size-preserving pointer to integer cast
>> fs/ceph/file.c:229:9: sparse: sparse: non size-preserving integer to pointer cast
>> fs/ceph/file.c:229:9: sparse: sparse: non size-preserving integer to pointer cast
>> fs/ceph/file.c:229:9: sparse: sparse: non size-preserving pointer to integer cast
>> fs/ceph/file.c:229:9: sparse: sparse: non size-preserving integer to pointer cast
>> fs/ceph/file.c:229:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:297:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:297:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:297:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:297:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:297:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:302:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:302:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:302:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:302:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:302:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:335:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:335:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:335:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:335:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:335:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:368:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:368:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:368:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:398:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:415:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:415:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:415:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:415:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:470:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:470:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:470:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:494:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:508:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:508:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:772:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:772:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:772:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:827:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1006:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1017:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1052:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1052:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1052:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1052:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1065:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1065:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1065:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1065:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1112:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1112:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1112:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1112:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1112:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1148:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1148:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1148:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1148:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1212:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1212:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1212:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1212:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1259:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1259:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1316:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1316:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1316:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1360:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1360:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1360:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1404:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1404:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1404:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1404:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1576:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1576:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1576:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1576:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1576:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1812:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1812:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1812:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:1812:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1857:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1857:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1857:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1857:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1857:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:1857:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:2101:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2101:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2216:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2216:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:2216:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2216:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2250:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/file.c:2250:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2250:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2250:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/file.c:2250:17: sparse: sparse: non size-preserving pointer to integer cast
--
>> fs/ceph/addr.c:1797:17: sparse: sparse: cast from restricted xa_mark_t
>> fs/ceph/addr.c:1797:17: sparse: sparse: cast from restricted xa_mark_t
>> fs/ceph/addr.c:1797:17: sparse: sparse: cast from restricted xa_mark_t
>> fs/ceph/addr.c:2125:17: sparse: sparse: cast from restricted vm_fault_t
>> fs/ceph/addr.c:2125:17: sparse: sparse: cast from restricted vm_fault_t
>> fs/ceph/addr.c:2125:17: sparse: sparse: cast from restricted vm_fault_t
   fs/ceph/addr.c:2168:17: sparse: sparse: cast from restricted vm_fault_t
   fs/ceph/addr.c:2168:17: sparse: sparse: cast from restricted vm_fault_t
   fs/ceph/addr.c:2168:17: sparse: sparse: cast from restricted vm_fault_t
   fs/ceph/addr.c:2275:9: sparse: sparse: cast from restricted vm_fault_t
   fs/ceph/addr.c:2275:9: sparse: sparse: cast from restricted vm_fault_t
   fs/ceph/addr.c:2275:9: sparse: sparse: cast from restricted vm_fault_t
>> fs/ceph/addr.c:95:17: sparse: sparse: non size-preserving integer to pointer cast
>> fs/ceph/addr.c:95:17: sparse: sparse: non size-preserving integer to pointer cast
>> fs/ceph/addr.c:95:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:123:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:123:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:123:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:123:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:123:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:161:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:161:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:169:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:169:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:241:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:428:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:428:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:428:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:428:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:453:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:453:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:496:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:496:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:542:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:542:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:548:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:548:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:567:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:567:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:703:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:703:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:736:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:807:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:807:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:807:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:816:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:816:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:816:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:822:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:822:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:822:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:822:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:834:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:834:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:834:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:844:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:895:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:895:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:895:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:895:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:895:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:895:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:920:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:920:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:920:25: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:931:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:931:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:931:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:936:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:936:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:936:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:979:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:979:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1037:25: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1045:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1045:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1045:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1241:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1248:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1248:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1248:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1248:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1260:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1273:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1397:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1397:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1397:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1397:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1405:25: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1429:25: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1457:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1457:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1457:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1616:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1616:25: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1657:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1657:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1755:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1755:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1755:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1176:9: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1176:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1845:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1874:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1874:9: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1913:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1913:17: sparse: sparse: non size-preserving integer to pointer cast
   fs/ceph/addr.c:1913:17: sparse: sparse: non size-preserving pointer to integer cast
   fs/ceph/addr.c:1935:25: sparse: sparse: non size-preserving integer to pointer cast

vim +3195 fs/ceph/file.c

1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3165  
64bf5ff58dff757 Dave Chinner   2019-06-05  3166  static ssize_t __ceph_copy_file_range(struct file *src_file, loff_t src_off,
503f82a9932d311 Luis Henriques 2018-10-15  3167  				      struct file *dst_file, loff_t dst_off,
503f82a9932d311 Luis Henriques 2018-10-15  3168  				      size_t len, unsigned int flags)
503f82a9932d311 Luis Henriques 2018-10-15  3169  {
503f82a9932d311 Luis Henriques 2018-10-15  3170  	struct inode *src_inode = file_inode(src_file);
503f82a9932d311 Luis Henriques 2018-10-15  3171  	struct inode *dst_inode = file_inode(dst_file);
503f82a9932d311 Luis Henriques 2018-10-15  3172  	struct ceph_inode_info *src_ci = ceph_inode(src_inode);
503f82a9932d311 Luis Henriques 2018-10-15  3173  	struct ceph_inode_info *dst_ci = ceph_inode(dst_inode);
503f82a9932d311 Luis Henriques 2018-10-15  3174  	struct ceph_cap_flush *prealloc_cf;
5995d90d2d19f33 Xiubo Li       2023-06-12  3175  	struct ceph_fs_client *src_fsc = ceph_inode_to_fs_client(src_inode);
38d46409c4639a1 Xiubo Li       2023-06-12  3176  	struct ceph_client *cl = src_fsc->client;
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3177  	loff_t size;
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3178  	ssize_t ret = -EIO, bytes;
503f82a9932d311 Luis Henriques 2018-10-15  3179  	u64 src_objnum, dst_objnum, src_objoff, dst_objoff;
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3180  	u32 src_objlen, dst_objlen;
503f82a9932d311 Luis Henriques 2018-10-15  3181  	int src_got = 0, dst_got = 0, err, dirty;
503f82a9932d311 Luis Henriques 2018-10-15  3182  
6fd4e634835208d Luis Henriques 2019-09-09  3183  	if (src_inode->i_sb != dst_inode->i_sb) {
5995d90d2d19f33 Xiubo Li       2023-06-12  3184  		struct ceph_fs_client *dst_fsc = ceph_inode_to_fs_client(dst_inode);
6fd4e634835208d Luis Henriques 2019-09-09  3185  
6fd4e634835208d Luis Henriques 2019-09-09  3186  		if (ceph_fsid_compare(&src_fsc->client->fsid,
6fd4e634835208d Luis Henriques 2019-09-09  3187  				      &dst_fsc->client->fsid)) {
010045293af6194 Alex Markuze   2026-08-20  3188  			{
010045293af6194 Alex Markuze   2026-08-20  3189  				char src_uuid[40], dst_uuid[40];
010045293af6194 Alex Markuze   2026-08-20  3190  
010045293af6194 Alex Markuze   2026-08-20  3191  				snprintf(src_uuid, sizeof(src_uuid), "%pU",
010045293af6194 Alex Markuze   2026-08-20  3192  					 &src_fsc->client->fsid);
010045293af6194 Alex Markuze   2026-08-20  3193  				snprintf(dst_uuid, sizeof(dst_uuid), "%pU",
010045293af6194 Alex Markuze   2026-08-20  3194  					 &dst_fsc->client->fsid);
010045293af6194 Alex Markuze   2026-08-20 @3195  				boutc(cl, "Copying files across clusters: src: %s dst: %s\n",
010045293af6194 Alex Markuze   2026-08-20  3196  				     src_uuid, dst_uuid);
010045293af6194 Alex Markuze   2026-08-20  3197  			}
5dae222a5ff0c26 Amir Goldstein 2019-06-05  3198  			return -EXDEV;
6fd4e634835208d Luis Henriques 2019-09-09  3199  		}
6fd4e634835208d Luis Henriques 2019-09-09  3200  	}
ccb36aa1b703696 Max Kellermann 2026-08-24  3201  	if (ceph_in_snap(dst_inode))
503f82a9932d311 Luis Henriques 2018-10-15  3202  		return -EROFS;
503f82a9932d311 Luis Henriques 2018-10-15  3203  
503f82a9932d311 Luis Henriques 2018-10-15  3204  	/*
503f82a9932d311 Luis Henriques 2018-10-15  3205  	 * Some of the checks below will return -EOPNOTSUPP, which will force a
503f82a9932d311 Luis Henriques 2018-10-15  3206  	 * fallback to the default VFS copy_file_range implementation.  This is
503f82a9932d311 Luis Henriques 2018-10-15  3207  	 * desirable in several cases (for ex, the 'len' is smaller than the
503f82a9932d311 Luis Henriques 2018-10-15  3208  	 * size of the objects, or in cases where that would be more
503f82a9932d311 Luis Henriques 2018-10-15  3209  	 * efficient).
503f82a9932d311 Luis Henriques 2018-10-15  3210  	 */
503f82a9932d311 Luis Henriques 2018-10-15  3211  
6fd4e634835208d Luis Henriques 2019-09-09  3212  	if (ceph_test_mount_opt(src_fsc, NOCOPYFROM))
ea4cdc548e5e74a Luis Henriques 2018-10-15  3213  		return -EOPNOTSUPP;
ea4cdc548e5e74a Luis Henriques 2018-10-15  3214  
78beb0ff2feceb1 Luis Henriques 2020-01-08  3215  	if (!src_fsc->have_copy_from2)
78beb0ff2feceb1 Luis Henriques 2020-01-08  3216  		return -EOPNOTSUPP;
78beb0ff2feceb1 Luis Henriques 2020-01-08  3217  
a3a0819388b2bf1 Luis Henriques 2019-10-31  3218  	/*
a3a0819388b2bf1 Luis Henriques 2019-10-31  3219  	 * Striped file layouts require that we copy partial objects, but the
a3a0819388b2bf1 Luis Henriques 2019-10-31  3220  	 * OSD copy-from operation only supports full-object copies.  Limit
a3a0819388b2bf1 Luis Henriques 2019-10-31  3221  	 * this to non-striped file layouts for now.
a3a0819388b2bf1 Luis Henriques 2019-10-31  3222  	 */
503f82a9932d311 Luis Henriques 2018-10-15  3223  	if ((src_ci->i_layout.stripe_unit != dst_ci->i_layout.stripe_unit) ||
a3a0819388b2bf1 Luis Henriques 2019-10-31  3224  	    (src_ci->i_layout.stripe_count != 1) ||
a3a0819388b2bf1 Luis Henriques 2019-10-31  3225  	    (dst_ci->i_layout.stripe_count != 1) ||
a3a0819388b2bf1 Luis Henriques 2019-10-31  3226  	    (src_ci->i_layout.object_size != dst_ci->i_layout.object_size)) {
010045293af6194 Alex Markuze   2026-08-20  3227  		boutc(cl, "Invalid src/dst files layout\n");
503f82a9932d311 Luis Henriques 2018-10-15  3228  		return -EOPNOTSUPP;
a3a0819388b2bf1 Luis Henriques 2019-10-31  3229  	}
503f82a9932d311 Luis Henriques 2018-10-15  3230  
94af0470924c636 Jeff Layton    2021-07-01  3231  	/* Every encrypted inode gets its own key, so we can't offload them */
94af0470924c636 Jeff Layton    2021-07-01  3232  	if (IS_ENCRYPTED(src_inode) || IS_ENCRYPTED(dst_inode))
94af0470924c636 Jeff Layton    2021-07-01  3233  		return -EOPNOTSUPP;
94af0470924c636 Jeff Layton    2021-07-01  3234  
503f82a9932d311 Luis Henriques 2018-10-15  3235  	if (len < src_ci->i_layout.object_size)
503f82a9932d311 Luis Henriques 2018-10-15  3236  		return -EOPNOTSUPP; /* no remote copy will be done */
503f82a9932d311 Luis Henriques 2018-10-15  3237  
503f82a9932d311 Luis Henriques 2018-10-15  3238  	prealloc_cf = ceph_alloc_cap_flush();
503f82a9932d311 Luis Henriques 2018-10-15  3239  	if (!prealloc_cf)
503f82a9932d311 Luis Henriques 2018-10-15  3240  		return -ENOMEM;
503f82a9932d311 Luis Henriques 2018-10-15  3241  
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3242  	/* Start by sync'ing the source and destination files */
503f82a9932d311 Luis Henriques 2018-10-15  3243  	ret = file_write_and_wait_range(src_file, src_off, (src_off + len));
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3244  	if (ret < 0) {
010045293af6194 Alex Markuze   2026-08-20  3245  		boutc(cl, "failed to write src file (%zd)\n", ret);
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3246  		goto out;
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3247  	}
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3248  	ret = file_write_and_wait_range(dst_file, dst_off, (dst_off + len));
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3249  	if (ret < 0) {
010045293af6194 Alex Markuze   2026-08-20  3250  		boutc(cl, "failed to write dst file (%zd)\n", ret);
503f82a9932d311 Luis Henriques 2018-10-15  3251  		goto out;
c2c6d3ce0d9a1fa Luis Henriques 2018-10-23  3252  	}
503f82a9932d311 Luis Henriques 2018-10-15  3253  
503f82a9932d311 Luis Henriques 2018-10-15  3254  	/*
503f82a9932d311 Luis Henriques 2018-10-15  3255  	 * We need FILE_WR caps for dst_ci and FILE_RD for src_ci as other
503f82a9932d311 Luis Henriques 2018-10-15  3256  	 * clients may have dirty data in their caches.  And OSDs know nothing
503f82a9932d311 Luis Henriques 2018-10-15  3257  	 * about caps, so they can't safely do the remote object copies.
503f82a9932d311 Luis Henriques 2018-10-15  3258  	 */
5e3ded1bb642f2d Yan, Zheng     2019-07-25  3259  	err = get_rd_wr_caps(src_file, &src_got,
5e3ded1bb642f2d Yan, Zheng     2019-07-25  3260  			     dst_file, (dst_off + len), &dst_got);
503f82a9932d311 Luis Henriques 2018-10-15  3261  	if (err < 0) {
010045293af6194 Alex Markuze   2026-08-20  3262  		boutc(cl, "get_rd_wr_caps returned %d\n", err);
503f82a9932d311 Luis Henriques 2018-10-15  3263  		ret = -EOPNOTSUPP;
503f82a9932d311 Luis Henriques 2018-10-15  3264  		goto out;
503f82a9932d311 Luis Henriques 2018-10-15  3265  	}
503f82a9932d311 Luis Henriques 2018-10-15  3266  
503f82a9932d311 Luis Henriques 2018-10-15  3267  	ret = is_file_size_ok(src_inode, dst_inode, src_off, dst_off, len);
503f82a9932d311 Luis Henriques 2018-10-15  3268  	if (ret < 0)
503f82a9932d311 Luis Henriques 2018-10-15  3269  		goto out_caps;
503f82a9932d311 Luis Henriques 2018-10-15  3270  
503f82a9932d311 Luis Henriques 2018-10-15  3271  	/* Drop dst file cached pages */
400e1286c0ec3fd Jeff Layton    2021-12-07  3272  	ceph_fscache_invalidate(dst_inode, false);
503f82a9932d311 Luis Henriques 2018-10-15  3273  	ret = invalidate_inode_pages2_range(dst_inode->i_mapping,
503f82a9932d311 Luis Henriques 2018-10-15  3274  					    dst_off >> PAGE_SHIFT,
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3275  					    (dst_off + len) >> PAGE_SHIFT);
503f82a9932d311 Luis Henriques 2018-10-15  3276  	if (ret < 0) {
010045293af6194 Alex Markuze   2026-08-20  3277  		boutc(cl, "Failed to invalidate inode pages (%zd)\n",
38d46409c4639a1 Xiubo Li       2023-06-12  3278  			    ret);
503f82a9932d311 Luis Henriques 2018-10-15  3279  		ret = 0; /* XXX */
503f82a9932d311 Luis Henriques 2018-10-15  3280  	}
503f82a9932d311 Luis Henriques 2018-10-15  3281  	ceph_calc_file_object_mapping(&src_ci->i_layout, src_off,
503f82a9932d311 Luis Henriques 2018-10-15  3282  				      src_ci->i_layout.object_size,
503f82a9932d311 Luis Henriques 2018-10-15  3283  				      &src_objnum, &src_objoff, &src_objlen);
503f82a9932d311 Luis Henriques 2018-10-15  3284  	ceph_calc_file_object_mapping(&dst_ci->i_layout, dst_off,
503f82a9932d311 Luis Henriques 2018-10-15  3285  				      dst_ci->i_layout.object_size,
503f82a9932d311 Luis Henriques 2018-10-15  3286  				      &dst_objnum, &dst_objoff, &dst_objlen);
503f82a9932d311 Luis Henriques 2018-10-15  3287  	/* object-level offsets need to the same */
503f82a9932d311 Luis Henriques 2018-10-15  3288  	if (src_objoff != dst_objoff) {
503f82a9932d311 Luis Henriques 2018-10-15  3289  		ret = -EOPNOTSUPP;
503f82a9932d311 Luis Henriques 2018-10-15  3290  		goto out_caps;
503f82a9932d311 Luis Henriques 2018-10-15  3291  	}
503f82a9932d311 Luis Henriques 2018-10-15  3292  
503f82a9932d311 Luis Henriques 2018-10-15  3293  	/*
503f82a9932d311 Luis Henriques 2018-10-15  3294  	 * Do a manual copy if the object offset isn't object aligned.
503f82a9932d311 Luis Henriques 2018-10-15  3295  	 * 'src_objlen' contains the bytes left until the end of the object,
503f82a9932d311 Luis Henriques 2018-10-15  3296  	 * starting at the src_off
503f82a9932d311 Luis Henriques 2018-10-15  3297  	 */
503f82a9932d311 Luis Henriques 2018-10-15  3298  	if (src_objoff) {
010045293af6194 Alex Markuze   2026-08-20  3299  		boutc(cl, "Initial partial copy of %u bytes\n", src_objlen);
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3300  
503f82a9932d311 Luis Henriques 2018-10-15  3301  		/*
503f82a9932d311 Luis Henriques 2018-10-15  3302  		 * we need to temporarily drop all caps as we'll be calling
503f82a9932d311 Luis Henriques 2018-10-15  3303  		 * {read,write}_iter, which will get caps again.
503f82a9932d311 Luis Henriques 2018-10-15  3304  		 */
503f82a9932d311 Luis Henriques 2018-10-15  3305  		put_rd_wr_caps(src_ci, src_got, dst_ci, dst_got);
488e8f685207e07 Amir Goldstein 2023-11-30  3306  		ret = splice_file_range(src_file, &src_off, dst_file, &dst_off,
488e8f685207e07 Amir Goldstein 2023-11-30  3307  					src_objlen);
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3308  		/* Abort on short copies or on error */
07bb00ef00ace88 Dan Carpenter  2023-10-07  3309  		if (ret < (long)src_objlen) {
010045293af6194 Alex Markuze   2026-08-20  3310  			boutc(cl, "Failed partial copy (%zd)\n", ret);
503f82a9932d311 Luis Henriques 2018-10-15  3311  			goto out;
503f82a9932d311 Luis Henriques 2018-10-15  3312  		}
503f82a9932d311 Luis Henriques 2018-10-15  3313  		len -= ret;
5e3ded1bb642f2d Yan, Zheng     2019-07-25  3314  		err = get_rd_wr_caps(src_file, &src_got,
5e3ded1bb642f2d Yan, Zheng     2019-07-25  3315  				     dst_file, (dst_off + len), &dst_got);
503f82a9932d311 Luis Henriques 2018-10-15  3316  		if (err < 0)
503f82a9932d311 Luis Henriques 2018-10-15  3317  			goto out;
503f82a9932d311 Luis Henriques 2018-10-15  3318  		err = is_file_size_ok(src_inode, dst_inode,
503f82a9932d311 Luis Henriques 2018-10-15  3319  				      src_off, dst_off, len);
503f82a9932d311 Luis Henriques 2018-10-15  3320  		if (err < 0)
503f82a9932d311 Luis Henriques 2018-10-15  3321  			goto out_caps;
503f82a9932d311 Luis Henriques 2018-10-15  3322  	}
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3323  
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3324  	size = i_size_read(dst_inode);
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3325  	bytes = ceph_do_objects_copy(src_ci, &src_off, dst_ci, &dst_off,
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3326  				     src_fsc, len, flags);
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3327  	if (bytes <= 0) {
503f82a9932d311 Luis Henriques 2018-10-15  3328  		if (!ret)
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3329  			ret = bytes;
503f82a9932d311 Luis Henriques 2018-10-15  3330  		goto out_caps;
503f82a9932d311 Luis Henriques 2018-10-15  3331  	}
010045293af6194 Alex Markuze   2026-08-20  3332  	boutc(cl, "Copied %zu bytes out of %zu\n", bytes, len);
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3333  	len -= bytes;
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3334  	ret += bytes;
503f82a9932d311 Luis Henriques 2018-10-15  3335  
503f82a9932d311 Luis Henriques 2018-10-15  3336  	file_update_time(dst_file);
5c30835690f12e1 Jeff Layton    2019-06-06  3337  	inode_inc_iversion_raw(dst_inode);
5c30835690f12e1 Jeff Layton    2019-06-06  3338  
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3339  	if (dst_off > size) {
503f82a9932d311 Luis Henriques 2018-10-15  3340  		/* Let the MDS know about dst file size change */
a0d93e327fc424b Yan, Zheng     2020-03-05  3341  		if (ceph_inode_set_size(dst_inode, dst_off) ||
a0d93e327fc424b Yan, Zheng     2020-03-05  3342  		    ceph_quota_is_max_bytes_approaching(dst_inode, dst_off))
e4b731ccb0975fd Xiubo Li       2022-10-18  3343  			ceph_check_caps(dst_ci, CHECK_CAPS_AUTHONLY | CHECK_CAPS_FLUSH);
503f82a9932d311 Luis Henriques 2018-10-15  3344  	}
503f82a9932d311 Luis Henriques 2018-10-15  3345  	/* Mark Fw dirty */
503f82a9932d311 Luis Henriques 2018-10-15  3346  	spin_lock(&dst_ci->i_ceph_lock);
503f82a9932d311 Luis Henriques 2018-10-15  3347  	dirty = __ceph_mark_dirty_caps(dst_ci, CEPH_CAP_FILE_WR, &prealloc_cf);
503f82a9932d311 Luis Henriques 2018-10-15  3348  	spin_unlock(&dst_ci->i_ceph_lock);
503f82a9932d311 Luis Henriques 2018-10-15  3349  	if (dirty)
503f82a9932d311 Luis Henriques 2018-10-15  3350  		__mark_inode_dirty(dst_inode, dirty);
503f82a9932d311 Luis Henriques 2018-10-15  3351  
503f82a9932d311 Luis Henriques 2018-10-15  3352  out_caps:
503f82a9932d311 Luis Henriques 2018-10-15  3353  	put_rd_wr_caps(src_ci, src_got, dst_ci, dst_got);
503f82a9932d311 Luis Henriques 2018-10-15  3354  
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3355  	/*
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3356  	 * Do the final manual copy if we still have some bytes left, unless
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3357  	 * there were errors in remote object copies (len >= object_size).
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3358  	 */
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3359  	if (len && (len < src_ci->i_layout.object_size)) {
010045293af6194 Alex Markuze   2026-08-20  3360  		boutc(cl, "Final partial copy of %zu bytes\n", len);
488e8f685207e07 Amir Goldstein 2023-11-30  3361  		bytes = splice_file_range(src_file, &src_off, dst_file,
488e8f685207e07 Amir Goldstein 2023-11-30  3362  					  &dst_off, len);
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3363  		if (bytes > 0)
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3364  			ret += bytes;
1b0c3b9f91f0df0 Luis Henriques 2020-02-24  3365  		else
010045293af6194 Alex Markuze   2026-08-20  3366  			boutc(cl, "Failed partial copy (%zd)\n", bytes);
503f82a9932d311 Luis Henriques 2018-10-15  3367  	}
503f82a9932d311 Luis Henriques 2018-10-15  3368  
503f82a9932d311 Luis Henriques 2018-10-15  3369  out:
503f82a9932d311 Luis Henriques 2018-10-15  3370  	ceph_free_cap_flush(prealloc_cf);
503f82a9932d311 Luis Henriques 2018-10-15  3371  
503f82a9932d311 Luis Henriques 2018-10-15  3372  	return ret;
503f82a9932d311 Luis Henriques 2018-10-15  3373  }
503f82a9932d311 Luis Henriques 2018-10-15  3374  

--
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-09-08 11:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-08 11:39 [ceph-client:testing 30/33] fs/ceph/file.c:3195:33: sparse: sparse: invalid initializer 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.