Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Apr 2023 15:50:35 GMT
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 20be1b4fc4b7 - main - zfs: try to fallback early if can't do optimized copy
Message-ID:  <202304071550.337FoZao060793@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202304071550.337FoZao060793>