mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 03:24:44 +00:00 
			
		
		
		
	BRT should return EOPNOTSUPP
Return the more descriptive EOPNOTSUPP instead of EXDEV when the storage pool doesn't support block cloning. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Rob Norris <rob.norris@klarasystems.com> Signed-off-by: Kay Pedersen <mail@mkwg.de> Closes #15097
This commit is contained in:
		
							parent
							
								
									36d1a3ef4e
								
							
						
					
					
						commit
						c24a480631
					
				@ -6290,7 +6290,7 @@ zfs_freebsd_copy_file_range(struct vop_copy_file_range_args *ap)
 | 
			
		||||
 | 
			
		||||
	error = zfs_clone_range(VTOZ(invp), ap->a_inoffp, VTOZ(outvp),
 | 
			
		||||
	    ap->a_outoffp, &len, ap->a_outcred);
 | 
			
		||||
	if (error == EXDEV)
 | 
			
		||||
	if (error == EXDEV || error == EOPNOTSUPP)
 | 
			
		||||
		goto bad_locked_fallback;
 | 
			
		||||
	*ap->a_lenp = (size_t)len;
 | 
			
		||||
out_locked:
 | 
			
		||||
 | 
			
		||||
@ -1078,6 +1078,16 @@ zfs_clone_range(znode_t *inzp, uint64_t *inoffp, znode_t *outzp,
 | 
			
		||||
		return (SET_ERROR(EXDEV));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * outos and inos belongs to the same storage pool.
 | 
			
		||||
	 * see a few lines above, only one check.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!spa_feature_is_enabled(dmu_objset_spa(outos),
 | 
			
		||||
	    SPA_FEATURE_BLOCK_CLONING)) {
 | 
			
		||||
		zfs_exit_two(inzfsvfs, outzfsvfs, FTAG);
 | 
			
		||||
		return (SET_ERROR(EOPNOTSUPP));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ASSERT(!outzfsvfs->z_replay);
 | 
			
		||||
 | 
			
		||||
	error = zfs_verify_zp(inzp);
 | 
			
		||||
@ -1088,12 +1098,6 @@ zfs_clone_range(znode_t *inzp, uint64_t *inoffp, znode_t *outzp,
 | 
			
		||||
		return (error);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!spa_feature_is_enabled(dmu_objset_spa(outos),
 | 
			
		||||
	    SPA_FEATURE_BLOCK_CLONING)) {
 | 
			
		||||
		zfs_exit_two(inzfsvfs, outzfsvfs, FTAG);
 | 
			
		||||
		return (SET_ERROR(EXDEV));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We don't copy source file's flags that's why we don't allow to clone
 | 
			
		||||
	 * files that are in quarantine.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user