Date: Fri, 14 Oct 2005 23:41:13 GMT From: soc-chenk <soc-chenk@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 85318 for review Message-ID: <200510142341.j9ENfDig098090@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=85318 Change 85318 by soc-chenk@soc-chenk_leavemealone on 2005/10/14 23:40:32 Attempt to fix some known non-privilegedly accessible crash schemes - tried to fix: - forced unmount when being busy - deadlocks by null mounts Submitted by: soc-chenk Affected files ... .. //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.c#17 edit Differences ... ==== //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.c#17 (text+ko) ==== @@ -333,8 +333,18 @@ out: mtx_unlock(&caliban->answer_mtx); - KASSERT(err || fuse_callbn_answered(caliban), - ("fuse requester was woken up but still no answer")); + if (! (err || fuse_callbn_answered(caliban))) { + /* + * Some deadlocky scenarios can get us here, like SIGKILLing + * the fusexmp daemon after a fuse dir has been null mounted + * over its original copy in the "normal" fs + * + * (I guess there is no need of kicking the daemon at this + * point...) + */ + DEBUG2G("fuse requester was woken up but still no answer"); + err = ENXIO; + } return (err); } @@ -3520,6 +3530,16 @@ panic("non-fat file passed to read routine"); vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY, td); + + if (fp->f_vnode->v_type == VBAD) { +#if _DEBUG2G + DEBUG2G("bad file\n"); + vn_printf(fp->f_vnode, " * "); +#endif + VOP_UNLOCK(fp->f_vnode, 0, td); + return (EBADF); + } + if ((flags & FOF_OFFSET) == 0) uio->uio_offset = fp->f_offset; @@ -4845,6 +4865,16 @@ return (0); vn_lock(fp->f_vnode, LK_EXCLUSIVE | LK_RETRY, td); + + if (fp->f_vnode->v_type == VBAD) { +#if _DEBUG2G + DEBUG2G("bad file\n"); + vn_printf(fp->f_vnode, " * "); +#endif + VOP_UNLOCK(fp->f_vnode, 0, td); + return (EBADF); + } + if (fp->f_flag & O_APPEND) { VOP_GETATTR(fp->f_vnode, &va, cred, td); uio->uio_offset = va.va_size;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510142341.j9ENfDig098090>