From owner-svn-src-all@FreeBSD.ORG Wed Sep 8 20:56:18 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DA89210656AB; Wed, 8 Sep 2010 20:56:18 +0000 (UTC) (envelope-from pjd@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CA3658FC08; Wed, 8 Sep 2010 20:56:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o88KuITR078129; Wed, 8 Sep 2010 20:56:18 GMT (envelope-from pjd@svn.freebsd.org) Received: (from pjd@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o88KuIUd078127; Wed, 8 Sep 2010 20:56:18 GMT (envelope-from pjd@svn.freebsd.org) Message-Id: <201009082056.o88KuIUd078127@svn.freebsd.org> From: Pawel Jakub Dawidek Date: Wed, 8 Sep 2010 20:56:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r212340 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Sep 2010 20:56:18 -0000 Author: pjd Date: Wed Sep 8 20:56:18 2010 New Revision: 212340 URL: http://svn.freebsd.org/changeset/base/212340 Log: - Log all the problems in devfs_fixup(). - Correct error paths. The system will be useless on devfs_fixup() failure, so why bother? Maybe for the same reason why a dead body is washed and dressed in a nice suit before it is put into a coffin? Maybe system's last will is to panic without any locks held? Reviewed by: kib Modified: head/sys/kern/vfs_mount.c Modified: head/sys/kern/vfs_mount.c ============================================================================== --- head/sys/kern/vfs_mount.c Wed Sep 8 20:35:43 2010 (r212339) +++ head/sys/kern/vfs_mount.c Wed Sep 8 20:56:18 2010 (r212340) @@ -1549,9 +1549,9 @@ static void devfs_fixup(struct thread *td) { struct nameidata nd; - int error; struct vnode *vp, *dvp; struct mount *mp; + int error; /* Remove our devfs mount from the mountlist and purge the cache */ mtx_lock(&mountlist_mtx); @@ -1575,16 +1575,26 @@ devfs_fixup(struct thread *td) error = namei(&nd); if (error) { printf("Lookup of /dev for devfs, error: %d\n", error); + vput(dvp); + vfs_unbusy(mp); return; } NDFREE(&nd, NDF_ONLY_PNBUF); vp = nd.ni_vp; if (vp->v_type != VDIR) { + printf("/dev is not a directory\n"); + vput(dvp); vput(vp); + vfs_unbusy(mp); + return; } error = vinvalbuf(vp, V_SAVE, 0, 0); if (error) { + printf("vinvalbuf() of /dev failed, error: %d\n", error); + vput(dvp); vput(vp); + vfs_unbusy(mp); + return; } cache_purge(vp); mp->mnt_vnodecovered = vp; @@ -1597,7 +1607,9 @@ devfs_fixup(struct thread *td) vfs_unbusy(mp); /* Unlink the no longer needed /dev/dev -> / symlink */ - kern_unlink(td, "/dev/dev", UIO_SYSSPACE); + error = kern_unlink(td, "/dev/dev", UIO_SYSSPACE); + if (error) + printf("kern_unlink of /dev/dev failed, error: %d\n", error); } /*