The branch main has been updated by kib:

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

commit 2c17429915f2e527d456600a9a2f30c528d1a305
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-06-02 07:05:33 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-07-04 15:23:42 +0000

    ufs: remove um_checkpath_lock
    
    It's guarantee is provided by the global rename lock now.
    
    Reviewed by:    markj, olce
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D50648
---
 sys/ufs/ffs/ffs_vfsops.c |  3 ---
 sys/ufs/ufs/ufs_lookup.c |  1 -
 sys/ufs/ufs/ufs_vnops.c  | 18 ++----------------
 sys/ufs/ufs/ufsmount.h   |  2 --
 4 files changed, 2 insertions(+), 22 deletions(-)

diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index 891e490a7031..75f5fe716c31 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -1012,7 +1012,6 @@ ffs_mountfs(struct vnode *odevvp, struct mount *mp, 
struct thread *td)
        else
                ump->um_check_blkno = NULL;
        mtx_init(UFS_MTX(ump), "FFS", "FFS Lock", MTX_DEF);
-       sx_init(&ump->um_checkpath_lock, "uchpth");
        fs->fs_ronly = ronly;
        fs->fs_active = NULL;
        mp->mnt_data = ump;
@@ -1182,7 +1181,6 @@ out:
        }
        if (ump != NULL) {
                mtx_destroy(UFS_MTX(ump));
-               sx_destroy(&ump->um_checkpath_lock);
                if (mp->mnt_gjprovider != NULL) {
                        free(mp->mnt_gjprovider, M_UFSMNT);
                        mp->mnt_gjprovider = NULL;
@@ -1306,7 +1304,6 @@ ffs_unmount(struct mount *mp, int mntflags)
        vrele(ump->um_odevvp);
        dev_rel(ump->um_dev);
        mtx_destroy(UFS_MTX(ump));
-       sx_destroy(&ump->um_checkpath_lock);
        if (mp->mnt_gjprovider != NULL) {
                free(mp->mnt_gjprovider, M_UFSMNT);
                mp->mnt_gjprovider = NULL;
diff --git a/sys/ufs/ufs/ufs_lookup.c b/sys/ufs/ufs/ufs_lookup.c
index eaf37c58756b..3f9c95e934fc 100644
--- a/sys/ufs/ufs/ufs_lookup.c
+++ b/sys/ufs/ufs/ufs_lookup.c
@@ -1412,7 +1412,6 @@ ufs_checkpath(ino_t source_ino, ino_t parent_ino, struct 
inode *target,
        vp = tvp = ITOV(target);
        mp = vp->v_mount;
        *wait_ino = 0;
-       sx_assert(&VFSTOUFS(mp)->um_checkpath_lock, SA_XLOCKED);
 
        if (target->i_number == source_ino)
                return (EEXIST);
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index 9aea01e70951..74cb094bdfe4 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -1273,9 +1273,9 @@ ufs_rename(
        struct mount *mp;
        ino_t ino;
        seqc_t fdvp_s, fvp_s, tdvp_s, tvp_s;
-       bool checkpath_locked, want_seqc_end;
+       bool want_seqc_end;
 
-       checkpath_locked = want_seqc_end = false;
+       want_seqc_end = false;
 
        endoff = 0;
        mp = tdvp->v_mount;
@@ -1427,10 +1427,6 @@ relock:
                }
                vfs_ref(mp);
                MPASS(!want_seqc_end);
-               if (checkpath_locked) {
-                       sx_xunlock(&VFSTOUFS(mp)->um_checkpath_lock);
-                       checkpath_locked = false;
-               }
                VOP_UNLOCK(fdvp);
                VOP_UNLOCK(fvp);
                vref(tdvp);
@@ -1484,8 +1480,6 @@ relock:
                if (error)
                        goto unlockout;
 
-               sx_xlock(&VFSTOUFS(mp)->um_checkpath_lock);
-               checkpath_locked = true;
                error = ufs_checkpath(ino, fdp->i_number, tdp, tcnp->cn_cred,
                    &ino);
                /*
@@ -1493,8 +1487,6 @@ relock:
                 * everything else and VGET before restarting.
                 */
                if (ino) {
-                       sx_xunlock(&VFSTOUFS(mp)->um_checkpath_lock);
-                       checkpath_locked = false;
                        VOP_UNLOCK(fdvp);
                        VOP_UNLOCK(fvp);
                        VOP_UNLOCK(tdvp);
@@ -1574,9 +1566,6 @@ relock:
                                vn_seqc_write_end(fdvp);
                                want_seqc_end = false;
                                vfs_ref(mp);
-                               MPASS(checkpath_locked);
-                               sx_xunlock(&VFSTOUFS(mp)->um_checkpath_lock);
-                               checkpath_locked = false;
                                VOP_UNLOCK(fdvp);
                                VOP_UNLOCK(fvp);
                                vref(tdvp);
@@ -1763,9 +1752,6 @@ unlockout:
                vn_seqc_write_end(fdvp);
        }
 
-       if (checkpath_locked)
-               sx_xunlock(&VFSTOUFS(mp)->um_checkpath_lock);
-
        vput(fdvp);
        vput(fvp);
 
diff --git a/sys/ufs/ufs/ufsmount.h b/sys/ufs/ufs/ufsmount.h
index 5c7fa11dae6a..d33b01e4425e 100644
--- a/sys/ufs/ufs/ufsmount.h
+++ b/sys/ufs/ufs/ufsmount.h
@@ -97,8 +97,6 @@ struct ufsmount {
        uint64_t um_maxsymlinklen;              /* (c) max size of short
                                                       symlink */
        struct  mtx um_lock;                    /* (c) Protects ufsmount & fs */
-       struct  sx um_checkpath_lock;           /* (c) Protects ufs_checkpath()
-                                                      result */
        struct  mount_softdeps *um_softdep;     /* (c) softdep mgmt structure */
        struct  vnode *um_quotas[MAXQUOTAS];    /* (q) pointer to quota files */
        struct  ucred *um_cred[MAXQUOTAS];      /* (q) quota file access cred */

Reply via email to