From nobody@FreeBSD.org  Wed Mar 22 14:02:11 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 9AD3A16A400
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 22 Mar 2006 14:02:11 +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 61F5D43D55
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 22 Mar 2006 14:02:11 +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 k2ME2BWf013162
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 22 Mar 2006 14:02:11 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id k2ME2AvL013152;
	Wed, 22 Mar 2006 14:02:10 GMT
	(envelope-from nobody)
Message-Id: <200603221402.k2ME2AvL013152@www.freebsd.org>
Date: Wed, 22 Mar 2006 14:02:10 GMT
From: Fabian Keil <freebsd-listen@fabiankeil.de>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [patch] mount_nfs causes a fatal trap 18 if the value of desiredvnodes is below 1000
X-Send-Pr-Version: www-2.3

>Number:         94830
>Category:       kern
>Synopsis:       [nfs] [patch] mount_nfs causes a fatal trap 18 if the value of desiredvnodes is below 1000
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 22 14:10:18 GMT 2006
>Closed-Date:    
>Last-Modified:  Mon Mar 12 15:25:51 GMT 2007
>Originator:     Fabian Keil
>Release:        RELENG_6
>Organization:
>Environment:
FreeBSD samba.local 6.1-PRERELEASE FreeBSD 6.1-PRERELEASE #8: Wed Mar 22 12:39:08 CET 2006     fk@TP51.local:/usr/obj/usr/src/sys/CASABLANCA  i386
>Description:
On a Pentium 90 with 16 MB RAM FreeBSD sets desiredvnodes to 926,
this leads to a panic (Fatal trap 18: integer divide fault while in
kernel mode) if mount_nfs is used.

The panic is caused by line 826 in /usr/src/sys/nfsclient/nfs_vfsops.c:
nmp->nm_wcommitsize = hibufspace / (desiredvnodes / 1000);

desiredvnodes is an integer value, if it is divided by a value
bigger than itself the result is zero.

Kernel configuration:
http://www.fabiankeil.de/tmp/casablanca/CASABLANCA

dmesg:
http://www.fabiankeil.de/tmp/casablanca/dmesg.boot

kgdb backtrace:
http://www.fabiankeil.de/tmp/casablanca/backtrace.txt
>How-To-Repeat:
Use mount_nfs on a machine with a desiredvnodes value below 1000
(or set sysctl kern.maxvnodes to a value below 1000 yourself).
>Fix:
Increase kern.maxvnodes by hand or let
http://www.fabiankeil.de/sourcecode/nfs_vfsops.c.patch
do the job.

I'm not sure if ignoring the kernel's calculations is the right
thing to do, but so far I didn't experience any ill side effects.
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->cel 
Responsible-Changed-By: cel 
Responsible-Changed-When: Wed May 24 19:43:31 UTC 2006 
Responsible-Changed-Why:  
Will review how nm_wcommitsize is calculated. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=94830 
Responsible-Changed-From-To: cel->freebsd-bugs 
Responsible-Changed-By: cel 
Responsible-Changed-When: Mon Mar 12 15:25:32 UTC 2007 
Responsible-Changed-Why:  
Back to the public pool. 

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