From nobody@FreeBSD.org  Sun Mar 19 02:08:02 2006
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id E457316A401
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 19 Mar 2006 02:08:02 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [216.136.204.117])
	by mx1.FreeBSD.org (Postfix) with ESMTP id B3D4043D45
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 19 Mar 2006 02:08:02 +0000 (GMT)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k2J282cc062605
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 19 Mar 2006 02:08:02 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id k2J282P8062604;
	Sun, 19 Mar 2006 02:08:02 GMT
	(envelope-from nobody)
Message-Id: <200603190208.k2J282P8062604@www.freebsd.org>
Date: Sun, 19 Mar 2006 02:08:02 GMT
From: Jason Harmening <jason.harmening@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Panic from Failed Removable Media Mount
X-Send-Pr-Version: www-2.3

>Number:         94669
>Category:       kern
>Synopsis:       [vfs] [patch] Panic from Failed Removable Media Mount
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    pjd
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Mar 19 02:10:10 GMT 2006
>Closed-Date:    
>Last-Modified:  Mon Feb 12 00:02:27 GMT 2007
>Originator:     Jason Harmening
>Release:        6.1-BETA4
>Organization:
>Environment:
reeBSD CORONA.austin.rr.com 6.1-PRERELEASE FreeBSD 6.1-PRERELEASE #4: Sat Mar 18 18:40:52 CST 2006     root@:/usr/obj/usr/src/sys/CUSTOM_DBG  amd64
>Description:
Received the following kernel panic when trying to mount DVD-RAM:

CORONA% mount /dev/acd0 /home/jason/dvdram
g_vfs_done():acd0[READ(offset=114688, length=16384)]error = 5
panic: mount: lost mount
cpuid = 0
KDB: stack backtrace:
kdb_backtrace() at kdb_backtrace+0x37
panic() at panic+0x1d1
vfs_domount() at vfs_domount+0x9ae
vfs_donmount() at vfs_donmount+0x400
kernel_mount() at kernel_mount+0x40
ffs_cmount() at ffs_cmount+0x7c
mount() at mount+0x1e3
syscall() at syscall+0x3a4
Xfast_syscall() at Xfast_syscall+0xa8
--- syscall (21, FreeBSD ELF64, mount), rip = 0x80067e0dc, rsp = 0x7fffffffdc88, rbp = 0x7fffffffe748 ---
Uptime: 1m34s
Dumping 1023 MB (2 chunks)

This may very well be a bad hardware/bad media issue.  If so, the OS should at least handle failed removable media mounts in a more elegant way than just panicking.  If not, it is a serious bug that should be fixed as soon as possible.

System is 6.1-BETA4/amd64 SMP.
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:

From: Jason Harmening <jason.harmening@gmail.com>
To: bug-followup@freebsd.org,
 jason.harmening@gmail.com
Cc: Kris Kennaway <kris@obsecurity.org>
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.
Responsible-Changed-From-To: freebsd-bugs->pjd 
Responsible-Changed-By: pjd 
Responsible-Changed-When: Mon Feb 12 00:02:10 UTC 2007 
Responsible-Changed-Why:  
I'll look into this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=94669 
>Unformatted:
