git: 20be1b4fc4b7 - main - zfs: try to fallback early if can't do optimized copy
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 07 Apr 2023 15:50:35 UTC
The branch main has been updated by mjg:
URL: https://cgit.FreeBSD.org/src/commit/?id=20be1b4fc4b72f10d5f9411e5bbde0f46a98be5b
commit 20be1b4fc4b72f10d5f9411e5bbde0f46a98be5b
Author: Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2023-04-05 20:42:28 +0000
Commit: Mateusz Guzik <mjg@FreeBSD.org>
CommitDate: 2023-04-07 15:47:45 +0000
zfs: try to fallback early if can't do optimized copy
Not complete, but already shaves on some locking.
Sponsored by: Rubicon Communications, LLC ("Netgate")
---
sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c
index 67c1a6e3344b..2ddc7133d416 100644
--- a/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c
+++ b/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c
@@ -6236,6 +6236,7 @@ struct vop_copy_file_range_args {
static int
zfs_freebsd_copy_file_range(struct vop_copy_file_range_args *ap)
{
+ zfsvfs_t *outzfsvfs;
struct vnode *invp = ap->a_invp;
struct vnode *outvp = ap->a_outvp;
struct mount *mp;
@@ -6251,6 +6252,13 @@ zfs_freebsd_copy_file_range(struct vop_copy_file_range_args *ap)
*/
vn_start_write(outvp, &mp, V_WAIT);
+ if (__predict_true(mp == outvp->v_mount)) {
+ outzfsvfs = (zfsvfs_t *)mp->mnt_data;
+ if (!spa_feature_is_enabled(dmu_objset_spa(outzfsvfs->z_os),
+ SPA_FEATURE_BLOCK_CLONING)) {
+ goto bad_write_fallback;
+ }
+ }
if (invp == outvp) {
if (vn_lock(outvp, LK_EXCLUSIVE) != 0) {
goto bad_write_fallback;