--- kern/vfs_syscalls.c- Thu Jul 26 16:24:47 2001 +++ kern/vfs_syscalls.c Thu Jan 24 11:38:17 2002 @@ -431,7 +431,9 @@ simple_lock(&mountlist_slock); mp->mnt_flag |= MNT_UNMOUNT; vfs_unbusy(mp, p); +#ifndef CITI lockmgr(&mp->mnt_lock, LK_DRAIN | LK_INTERLOCK, &mountlist_slock, p); +#endif mp->mnt_flag &=~ MNT_ASYNC; cache_purgevfs(mp); /* remove cache entries for this file sys */ if (mp->mnt_syncer != NULL) @@ -445,8 +447,10 @@ if ((mp->mnt_flag & MNT_RDONLY) == 0 && mp->mnt_syncer == NULL) (void) vfs_allocate_syncvnode(mp); mp->mnt_flag &= ~MNT_UNMOUNT; +#ifndef CITI lockmgr(&mp->mnt_lock, LK_RELEASE | LK_INTERLOCK | LK_REENABLE, &mountlist_slock, p); +#endif if (mp->mnt_flag & MNT_MWAIT) wakeup((caddr_t)mp); mp->mnt_flag &= ~MNT_MWAIT; @@ -459,8 +463,10 @@ } mp->mnt_vfc->vfc_refcount--; if (mp->mnt_vnodelist.lh_first != NULL) - panic("unmount: dangling vnode"); + printf("unmount: dangling vnode\n"); +#ifndef CITI lockmgr(&mp->mnt_lock, LK_RELEASE | LK_INTERLOCK, &mountlist_slock, p); +#endif if (mp->mnt_flag & MNT_MWAIT) wakeup((caddr_t)mp); free((caddr_t)mp, M_MOUNT);