From owner-freebsd-bugs@FreeBSD.ORG Sun Apr 9 19:00:38 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4926116A42C for ; Sun, 9 Apr 2006 19:00:38 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C8B7B43D45 for ; Sun, 9 Apr 2006 19:00:34 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k39J0YbP026920 for ; Sun, 9 Apr 2006 19:00:34 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k39J0YPl026918; Sun, 9 Apr 2006 19:00:34 GMT (envelope-from gnats) Date: Sun, 9 Apr 2006 19:00:34 GMT Message-Id: <200604091900.k39J0YPl026918@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Jason Harmening Cc: Subject: Re: kern/94669: Panic from Failed Removable Media Mount X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Jason Harmening List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Apr 2006 19:00:38 -0000 The following reply was made to PR kern/94669; it has been noted by GNATS. From: Jason Harmening To: bug-followup@freebsd.org, jason.harmening@gmail.com Cc: Kris Kennaway Subject: Re: kern/94669: Panic from Failed Removable Media Mount Date: Sun, 9 Apr 2006 13:55:34 -0500 The following patch to vfs_mount.c (v1.196.2.8) has worked for me (so far): --- vfs_mount_old.c Sat Apr 8 13:47:35 2006 +++ vfs_mount.c Sun Apr 9 13:46:47 2006 @@ -924,13 +924,18 @@ VI_LOCK(vp); vp->v_iflag &= ~VI_MOUNT; VI_UNLOCK(vp); + error = VFS_ROOT(mp, LK_EXCLUSIVE, &newdp, td); + if (error) { + VFS_UNMOUNT(mp, 0, td); + vfs_mount_destroy(mp, td); + vput(vp); + return (error); + } vp->v_mountedhere = mp; mtx_lock(&mountlist_mtx); TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list); mtx_unlock(&mountlist_mtx); vfs_event_signal(NULL, VQ_MOUNT, 0); - if (VFS_ROOT(mp, LK_EXCLUSIVE, &newdp, td)) - panic("mount: lost mount"); mountcheckdirs(vp, newdp); vput(newdp); VOP_UNLOCK(vp, 0, td); Now if I encounter an I/O error while trying to mount, the mount will simply fail, and I can successfully re-mount with no ill effects. I've only tested this patch with UFS-formatted media, so I don't know if it will cause problems for other filesystems. I'm also not very familiar with the FreeBSD vfs, so there could very well be some gaping hole in this patch that I'm not aware of.