Subject: kern/36553: tmpfs: panic: assertion uvmpdpol_pageisqueued_p(pg) fails
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <tnn@NetBSD.org>
List: netbsd-bugs
Date: 06/24/2007 19:55:00
>Number:         36553
>Category:       kern
>Synopsis:       tmpfs: panic: assertion uvmpdpol_pageisqueued_p(pg) fails
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Jun 24 19:55:00 +0000 2007
>Originator:     Tobias Nygren
>Release:        NetBSD 4.99.21
>Organization:
NetBSD
>Environment:
NetBSD stinkpad 4.99.21 NetBSD 4.99.21 (GENERIC.stinkpad) #0: Sun Jun 24 15:13:57 CEST 2007  tnn@stinkpad:/lfs/src/sys/arch/i386/compile/GENERIC.stinkpad i386
>Description:
It looks like we're trying to deactivate a page that is paged out:

panic: kernel diagnostic assertion "pg->wire_count != 0 || uvmpdpol_pageisqueued_p(pg)" failed: file "../../../../uvm/uvm_page.c", line 1718
Stopped in pid 9337.1 (tar) at  netbsd:cpu_Debugger+0x4:        popl    %ebp
db> bt
cpu_Debugger(c09c5a40,cc08c6f8,5314,0,1aa2) at netbsd:cpu_Debugger+0x4
panic(c0a2fe08,c0982b5c,c09f36a4,c09981e7,6b6) at netbsd:panic+0x155
__assert(c0982b5c,c09981e7,6b6,c09f36a4,0) at netbsd:__assert+0x2e
uvm_pagedeactivate(c1018518,20,31a,0,c0997447) at netbsd:uvm_pagedeactivate+0x63
uao_put(cd93cf54,0,0,0,0) at netbsd:uao_put+0x4e0
tmpfs_putpages(cc08c890,2,0,c07f8380,cbdefa94) at netbsd:tmpfs_putpages+0xea
VOP_PUTPAGES(cbdefa94,0,0,0,0) at netbsd:VOP_PUTPAGES+0x40
vinvalbuf(cbdefa94,1,ffffffff,cbe82c20,0) at netbsd:vinvalbuf+0x66
vclean(cbdefa94,0,c0a49b9c,c046f85e,0) at netbsd:vclean+0x92
vgonel(cbdefa94,cbe82c20,108,c099d536,144) at netbsd:vgonel+0x38
getcleanvnode(0,c099d536,214,c17cf294,c17cf304) at netbsd:getcleanvnode+0xf6
getnewvnode(19,c17ce000,c1244b00,cc08c9fc,e) at netbsd:getnewvnode+0xb6
tmpfs_alloc_vp(c17ce000,cdb895dc,cc08cbb8,e,cc08ca5c) at netbsd:tmpfs_alloc_vp+0xda
tmpfs_alloc_file(cb314000,cc08cbb8,cc08cb00,cc08cbcc,0) at netbsd:tmpfs_alloc_file+0x22d
tmpfs_create(cc08cab8,c099b946,834,0,0) at netbsd:tmpfs_create+0x3c
VOP_CREATE(cb314000,cc08cbb8,cc08cbcc,cc08cb00,d) at netbsd:VOP_CREATE+0x31
vn_open(cc08cba4,a03,180,c04d3aaf,cc08cbb0) at netbsd:vn_open+0x439
sys_open(cbe82c20,cc08cc48,cc08cc68,1,c053d866) at netbsd:sys_open+0xc5
syscall_plain() at netbsd:syscall_plain+0xb9
db> show page c1018518
PAGE 0xc1018518:
  flags=15<BUSY,TABLED,PAGEOUT>, pqflags=4<AOBJ>, wire_count=0, pa=0xc6d7000
  uobject=0xcd93cf54, uanon=0x0, offset=0x0 loan_count=0
  [page ownership tracking disabled]
db> show vnode cbdefa94
OBJECT 0xcbdefa94: locked=0, pgops=0xc0a45bac, npages=0, refs=0
VNODE flags 100<XLOCK>
mp 0xc17ce000 numoutput 0 size 0x1c59 writesize 0x1c59
data 0xcd93b320 usecount 0 writecount 0 holdcnt 0 numoutput 0
tag VT_TMPFS(25) type VREG(1) mount 0xc17ce000 typedata 0x0
db>

>How-To-Repeat:
Not sure, but tmpfs + swapping seems to be a prerequisite.
I can trigger it by untarring a ~500MB file to tmpfs, where my physical memory is 256MB + 6GB of swap.

>Fix:
n/a