The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=ed87040311b88e2c95a791aa049f2c37c857f048

commit ed87040311b88e2c95a791aa049f2c37c857f048
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2026-03-05 02:57:34 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2026-03-05 23:46:53 +0000

    zfs rename: properly cleanup on errors occuring before zfs_do_rename()
    
    Reported and tested by: arrowd
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D55539
---
 .../openzfs/module/os/freebsd/zfs/zfs_vnops_os.c   | 23 +++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

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 05ac77741d4f..31654ec82392 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
@@ -5527,15 +5527,24 @@ zfs_freebsd_rename(struct vop_rename_args *ap)
        }
 #endif
 
-       if (error == 0)
+       if (error == 0) {
                error = zfs_do_rename(fdvp, &fvp, ap->a_fcnp, tdvp, &tvp,
                    ap->a_tcnp, ap->a_fcnp->cn_cred);
-
-       vrele(fdvp);
-       vrele(fvp);
-       vrele(tdvp);
-       if (tvp != NULL)
-               vrele(tvp);
+               vrele(fdvp);
+               vrele(fvp);
+               vrele(tdvp);
+               if (tvp != NULL)
+                       vrele(tvp);
+       } else {
+               if (tdvp == tvp)
+                       vrele(tdvp);
+               else
+                       vput(tdvp);
+               if (tvp != NULL)
+                       vput(tvp);
+               vrele(fdvp);
+               vrele(fvp);
+       }
 
        return (error);
 }

Reply via email to