Index: kern/vfs_syscalls.c =================================================================== RCS file: /u/open/cvs/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.95.2.1 diff -u -r1.95.2.1 vfs_syscalls.c --- kern/vfs_syscalls.c 13 Oct 2002 20:54:54 -0000 1.95.2.1 +++ kern/vfs_syscalls.c 14 Feb 2003 21:07:41 -0000 @@ -442,7 +442,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) @@ -456,8 +458,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; @@ -470,8 +474,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);