* [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.