git: 12eeb8eed34f - stable/13 - ffs softdep: clear ump->um_softdep on softdep_unmount()
Konstantin Belousov
kib at FreeBSD.org
Sat Aug 14 10:22:23 UTC 2021
The branch stable/13 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=12eeb8eed34fbd8321ee0c525305c8cb13978f63
commit 12eeb8eed34fbd8321ee0c525305c8cb13978f63
Author: Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-03-03 17:42:24 +0000
Commit: Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-08-14 10:21:58 +0000
ffs softdep: clear ump->um_softdep on softdep_unmount()
(cherry picked from commit 81cdb19e04e57a934e8a5dd76e5c7e0afcba1acb)
---
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 37db84f06fd0..4f69dc853e4b 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -2773,13 +2773,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) {
@@ -2802,30 +2800,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 *
More information about the dev-commits-src-all
mailing list