Index: vfs_subr.c =================================================================== RCS file: /usr/repo/src/sys/kern/vfs_subr.c,v retrieving revision 1.635.2.16 diff -u -p -r1.635.2.16 vfs_subr.c --- vfs_subr.c 13 Mar 2006 03:06:34 -0000 1.635.2.16 +++ vfs_subr.c 30 Apr 2006 00:32:25 -0000 @@ -875,6 +875,15 @@ getnewvnode(tag, mp, vops, vpp) * Wait for available vnodes. */ if (numvnodes > desiredvnodes) { + if (mp != NULL && (mp->mnt_kern_flag & MNTK_SUSPEND)) { + /* + * File system is beeing suspended, we cannot risk a + * deadlock here, so allocate new vnode anyway. + */ + if (freevnodes > wantfreevnodes) + vnlru_free(freevnodes - wantfreevnodes); + goto alloc; + } if (vnlruproc_sig == 0) { vnlruproc_sig = 1; /* avoid unnecessary wakeups */ wakeup(vnlruproc); @@ -888,6 +897,7 @@ getnewvnode(tag, mp, vops, vpp) } #endif } +alloc: numvnodes++; mtx_unlock(&vnode_free_list_mtx); vp = (struct vnode *) uma_zalloc(vnode_zone, M_WAITOK|M_ZERO);