mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 10:01:01 +03: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
704c80f048
commit
5bdfff5cfc
@ -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),
|
error = zfs_clone_range(VTOZ(invp), ap->a_inoffp, VTOZ(outvp),
|
||||||
ap->a_outoffp, &len, ap->a_outcred);
|
ap->a_outoffp, &len, ap->a_outcred);
|
||||||
if (error == EXDEV)
|
if (error == EXDEV || error == EOPNOTSUPP)
|
||||||
goto bad_locked_fallback;
|
goto bad_locked_fallback;
|
||||||
*ap->a_lenp = (size_t)len;
|
*ap->a_lenp = (size_t)len;
|
||||||
out_locked:
|
out_locked:
|
||||||
|
@ -1078,6 +1078,16 @@ zfs_clone_range(znode_t *inzp, uint64_t *inoffp, znode_t *outzp,
|
|||||||
return (SET_ERROR(EXDEV));
|
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);
|
ASSERT(!outzfsvfs->z_replay);
|
||||||
|
|
||||||
error = zfs_verify_zp(inzp);
|
error = zfs_verify_zp(inzp);
|
||||||
@ -1088,12 +1098,6 @@ zfs_clone_range(znode_t *inzp, uint64_t *inoffp, znode_t *outzp,
|
|||||||
return (error);
|
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
|
* We don't copy source file's flags that's why we don't allow to clone
|
||||||
* files that are in quarantine.
|
* files that are in quarantine.
|
||||||
|
Loading…
Reference in New Issue
Block a user