Subject: Re: tmpfs panic
To: None <current-users@netbsd.org>
From: Antti Kantee <pooka@cs.hut.fi>
List: current-users
Date: 11/22/2007 23:07:48
On Thu Nov 22 2007 at 22:49:44 +0200, Antti Kantee wrote:
> On Thu Nov 22 2007 at 21:40:57 +0100, S.P.Zeidler wrote:
> > Hi,
> > 
> > yesterdays -current (amd64) told me today:
> > 
> > panic: kernel diagnostic assertion "page != NULL" failed: file
> > "/chroots/current-src/src/sys/fs/tmpfs/tmpfs_pool.c", line 168
> > Stopped in pid 3079.1 (pax) at  netbsd:breakpoint+0x1:  ret
> > db{3}> bt
> > breakpoint() at netbsd:breakpoint+0x1
> > __kernassert() at netbsd:__kernassert+0x2d
> > tmpfs_pool_page_alloc() at netbsd:tmpfs_pool_page_alloc+0xad
> > pool_grow() at netbsd:pool_grow+0x36
> > pool_get() at netbsd:pool_get+0x6e
> > tmpfs_alloc_dirent() at netbsd:tmpfs_alloc_dirent+0x3c
> > tmpfs_alloc_file() at netbsd:tmpfs_alloc_file+0x232
> > VOP_CREATE() at netbsd:VOP_CREATE+0x4d
> > vn_open() at netbsd:vn_open+0x39a
> > sys_open() at netbsd:sys_open+0xec
> > syscall() at netbsd:syscall+0x194
> 
>     nde = (struct tmpfs_dirent *)TMPFS_POOL_GET(&tmp->tm_dirent_pool, 0);
> 
> where:
> 
>     #define TMPFS_POOL_GET(tpp, flags) pool_get((struct pool *)(tpp), flags)
> 
> Those should definitely get called with PR_WAITOK.

Actually, I just removed the KASSERT panic for now.  Technically we
wouldn't want to fail here just because something needs to be paged to
swap, but we don't want to wait for memory for all eternity either if
we're creating empty files.

-- 
Antti Kantee <pooka@iki.fi>                     Of course he runs NetBSD
http://www.iki.fi/pooka/                          http://www.NetBSD.org/
    "la qualité la plus indispensable du cuisinier est l'exactitude"