The branch main has been updated by kib:

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

commit 81cdb19e04e57a934e8a5dd76e5c7e0afcba1acb
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2021-03-03 17:42:24 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2021-03-12 11:31:07 +0000

    ffs softdep: clear ump->um_softdep on softdep_unmount()
    
    Reviewed by:    mckusick
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    MFC after:      2 weeks
    Differential revision:  https://reviews.freebsd.org/D29178
---
 sys/ufs/ffs/ffs_softdep.c | 47 ++++++++++++++++++++++++++---------------------
 1 file changed, 26 insertions(+), 21 deletions(-)

diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 9c32a785a321..c1a9c300aeff 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -2776,13 +2776,11 @@ softdep_unmount(mp)
        struct mount *mp;
 {
        struct ufsmount *ump;
-#ifdef INVARIANTS
-       int i;
-#endif
+       struct mount_softdeps *ums;
 
-       KASSERT(MOUNTEDSOFTDEP(mp) != 0,
-           ("softdep_unmount called on non-softdep filesystem"));
        ump = VFSTOUFS(mp);
+       KASSERT(ump->um_softdep != NULL,
+           ("softdep_unmount called on non-softdep filesystem"));
        MNT_ILOCK(mp);
        mp->mnt_flag &= ~MNT_SOFTDEP;
        if (MOUNTEDSUJ(mp) == 0) {
@@ -2805,30 +2803,37 @@ softdep_unmount(mp)
                KASSERT((ump->softdep_flags & FLUSH_EXIT) == 0,
                    ("Thread shutdown failed"));
        }
+
        /*
-        * Free up our resources.
+        * We are no longer have softdep structure attached to ump.
         */
+       ums = ump->um_softdep;
        ACQUIRE_GBLLOCK(&lk);
-       TAILQ_REMOVE(&softdepmounts, ump->um_softdep, sd_next);
+       TAILQ_REMOVE(&softdepmounts, ums, sd_next);
        FREE_GBLLOCK(&lk);
-       rw_destroy(LOCK_PTR(ump));
-       hashdestroy(ump->pagedep_hashtbl, M_PAGEDEP, ump->pagedep_hash_size);
-       hashdestroy(ump->inodedep_hashtbl, M_INODEDEP, ump->inodedep_hash_size);
-       hashdestroy(ump->newblk_hashtbl, M_NEWBLK, ump->newblk_hash_size);
-       hashdestroy(ump->bmsafemap_hashtbl, M_BMSAFEMAP,
-           ump->bmsafemap_hash_size);
-       free(ump->indir_hashtbl, M_FREEWORK);
+       ump->um_softdep = NULL;
+
+       /*
+        * Free up our resources.
+        */
+       rw_destroy(&ums->sd_fslock);
+       hashdestroy(ums->sd_pdhash, M_PAGEDEP, ums->sd_pdhashsize);
+       hashdestroy(ums->sd_idhash, M_INODEDEP, ums->sd_idhashsize);
+       hashdestroy(ums->sd_newblkhash, M_NEWBLK, ums->sd_newblkhashsize);
+       hashdestroy(ums->sd_bmhash, M_BMSAFEMAP, ums->sd_bmhashsize);
+       free(ums->sd_indirhash, M_FREEWORK);
 #ifdef INVARIANTS
-       for (i = 0; i <= D_LAST; i++) {
-               KASSERT(ump->softdep_curdeps[i] == 0,
+       for (int i = 0; i <= D_LAST; i++) {
+               KASSERT(ums->sd_curdeps[i] == 0,
                    ("Unmount %s: Dep type %s != 0 (%ld)", ump->um_fs->fs_fsmnt,
-                   TYPENAME(i), ump->softdep_curdeps[i]));
-               KASSERT(LIST_EMPTY(&ump->softdep_alldeps[i]),
-                   ("Unmount %s: Dep type %s not empty (%p)", 
ump->um_fs->fs_fsmnt,
-                   TYPENAME(i), LIST_FIRST(&ump->softdep_alldeps[i])));
+                   TYPENAME(i), ums->sd_curdeps[i]));
+               KASSERT(LIST_EMPTY(&ums->sd_alldeps[i]),
+                   ("Unmount %s: Dep type %s not empty (%p)",
+                   ump->um_fs->fs_fsmnt,
+                   TYPENAME(i), LIST_FIRST(&ums->sd_alldeps[i])));
        }
 #endif
-       free(ump->um_softdep, M_MOUNTDATA);
+       free(ums, M_MOUNTDATA);
 }
 
 static struct jblocks *
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to