The branch stable/15 has been updated by kib:

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

commit 0b0bbdac18d153e365e20989e23636d51214f972
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2026-03-05 02:57:34 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2026-03-10 11:41:31 +0000

    zfs rename: properly cleanup on errors occuring before zfs_do_rename()
    
    (cherry picked from commit ed87040311b88e2c95a791aa049f2c37c857f048)
---
 .../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 42565b579de7..7ea6f119130b 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
@@ -5518,15 +5518,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