* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox