NetBSD Problem Report #44240

From yamt@NetBSD.org  Thu Dec 16 04:28:47 2010
Return-Path: <yamt@NetBSD.org>
Received: by www.NetBSD.org (Postfix, from userid 1270)
	id A2B2163BBA9; Thu, 16 Dec 2010 04:28:47 +0000 (UTC)
Message-Id: <20101216042847.A2B2163BBA9@www.NetBSD.org>
Date: Thu, 16 Dec 2010 04:28:47 +0000 (UTC)
From: yamt@NetBSD.org
Reply-To: yamt@NetBSD.org
To: gnats-bugs@NetBSD.org
Subject: puffs deadlock when a file system server died
X-Send-Pr-Version: 3.95

>Number:         44240
>Category:       kern
>Synopsis:       puffs deadlock when a file system server died
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    kern-bug-people
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 16 04:30:00 +0000 2010
>Closed-Date:    Fri Feb 11 09:16:21 +0000 2011
>Last-Modified:  Fri Feb 11 09:20:01 +0000 2011
>Originator:     YAMAMOTO Takashi
>Release:        NetBSD 5.99.41
>Organization:

>Environment:


Architecture: i386
Machine: i386
>Description:
	puffs often deadlock when a file system server died.
	the server is using PUFFS_KFLAG_NOCACHE_NAME|PUFFS_KFLAG_WTCACHE
	if it matters.

the following is the file system server dying due to an assertion failure.

(gdb) bt
#0  0xc02adf36 in mi_switch (l=0xd7384a80)
    at /siro/nbsd/src/sys/kern/kern_synch.c:790
#1  0xc02aac5b in sleepq_block (timo=0, catch=false)
    at /siro/nbsd/src/sys/kern/kern_sleepq.c:262
#2  0xc02b9c9d in turnstile_block (ts=0xd7cab758, q=1, obj=0xdf258fcc,
    sobj=0xc05e357c) at /siro/nbsd/src/sys/kern/kern_turnstile.c:343
#3  0xc02a632e in rw_vector_enter (rw=0xdf258fcc, op=RW_WRITER)
    at /siro/nbsd/src/sys/kern/kern_rwlock.c:391
#4  0xc01e73af in genfs_lock (v=0xd737394c)
    at /siro/nbsd/src/sys/miscfs/genfs/genfs_vnops.c:300
#5  0xc04e1af8 in VOP_LOCK (vp=0xdf258f2c, flags=2)
    at /siro/nbsd/src/sys/kern/vnode_if.c:1103
#6  0xc04c7c49 in vclean (vp=0xdf258f2c, flags=8)
    at /siro/nbsd/src/sys/kern/vfs_subr.c:1854
#7  0xc04cb465 in vflush (mp=0xd750e004, skipvp=0x0,
    flags=<value optimized out>) at /siro/nbsd/src/sys/kern/vfs_subr.c:1782
#8  0xd734a1f6 in puffs_vfsop_unmount ()
#9  0xc04c5b66 in VFS_UNMOUNT (mp=0xd750e004, a=524288)
    at /siro/nbsd/src/sys/kern/vfs_subr.c:3001
#10 0xc04cfe0c in dounmount (mp=0xd750e004, flags=524288, l=0xd7384a80)
    at /siro/nbsd/src/sys/kern/vfs_syscalls.c:776
#11 0xd7348153 in puffs_msgif_close ()
#12 0xd72be585 in putter_fop_close ()
#13 0xc02844ed in closef (fp=0xd6f805c0)
    at /siro/nbsd/src/sys/kern/kern_descrip.c:794
#14 0xc0284dfe in fd_close (fd=4) at /siro/nbsd/src/sys/kern/kern_descrip.c:679
#15 0xc0285afc in fd_free () at /siro/nbsd/src/sys/kern/kern_descrip.c:1529
#16 0xc028e23c in exit1 (l=0xd7384a80, rv=134)
    at /siro/nbsd/src/sys/kern/kern_exit.c:284
#17 0xc02a97bb in sigexit (l=0xd7384a80, signo=6)
    at /siro/nbsd/src/sys/kern/kern_sig.c:2205
#18 0xc02a9a5d in postsig (signo=6) at /siro/nbsd/src/sys/kern/kern_sig.c:2002
#19 0xc02969e8 in lwp_userret (l=0xd7384a80)
    at /siro/nbsd/src/sys/kern/kern_lwp.c:1395
#20 0xc0429f56 in syscall (frame=0xd7373d48)
    at /siro/nbsd/src/sys/sys/userret.h:90
#21 0xc01005cd in syscall1 ()

the following is an owner of the lock 0xdf258fcc.

(gdb) bt
#0  0xc02adf36 in mi_switch (l=0xd8713aa0)
    at /siro/nbsd/src/sys/kern/kern_synch.c:790
#1  0xc02aac5b in sleepq_block (timo=0, catch=false)
    at /siro/nbsd/src/sys/kern/kern_sleepq.c:262
#2  0xc02af35d in mtsleep (ident=0xc351de68, priority=516,
    wmesg=0xc0588d92 "genput", timo=0, mtx=0xdf258f2c)
    at /siro/nbsd/src/sys/kern/kern_synch.c:240
#3  0xc01e62c8 in genfs_do_putpages (vp=0xdf258f2c, startoff=1343488,
    endoff=1347584, origflags=<value optimized out>, busypg=0x0)
    at /siro/nbsd/src/sys/miscfs/genfs/genfs_io.c:1013
#4  0xc01e699d in genfs_putpages (v=0xd8ef8b1c)
    at /siro/nbsd/src/sys/miscfs/genfs/genfs_io.c:810
#5  0xc04e1603 in VOP_PUTPAGES (vp=0xdf258f2c, offlo=1343488, offhi=1347584,
    flags=1) at /siro/nbsd/src/sys/kern/vnode_if.c:1429
#6  0xd734d8dc in puffs_vnop_write ()
#7  0xd734b510 in puffs_vnop_checkop ()
#8  0xc04e23d4 in VOP_WRITE (vp=0xdf258f2c, uio=0xd8ef8c7c, ioflag=16,
    cred=0xd6d390c0) at /siro/nbsd/src/sys/kern/vnode_if.c:431
#9  0xc04d233c in vn_write (fp=0xd8c60780, offset=0xd8c60780, uio=0xd8ef8c7c,
    cred=0xd6d390c0, flags=1) at /siro/nbsd/src/sys/kern/vfs_vnops.c:566
#10 0xc041d845 in dofilewrite (fd=3, fp=0x0, buf=0xbb90e000, nbyte=45,
    offset=0xd8c60780, flags=1, retval=0xd8ef8d28)
    at /siro/nbsd/src/sys/kern/sys_generic.c:356
#11 0xc041d96f in sys_write (l=0xd8713aa0, uap=0xd8ef8d00, retval=0xd8ef8d28)
    at /siro/nbsd/src/sys/kern/sys_generic.c:324
#12 0xc0429e94 in syscall (frame=0xd8ef8d48)
    at /siro/nbsd/src/sys/sys/syscallvar.h:61
#13 0xc01005cd in syscall1 ()

(gdb) p *(struct vnode *)0xdf258f2c
$16 = {v_uobj = {vmobjlock = {u = {mtxa_owner = 0}}, pgops = 0xc056d128, 
    memq = {tqh_first = 0xc0b86448, tqh_last = 0xc351de7c}, uo_npages = 329, 
    uo_refs = 2, rb_tree = {rbt_root = 0xc31a49f8, rbt_ops = 0xc056cf80, 
      rbt_minmax = {0xc0b86448, 0xc351de68}}}, v_cv = {cv_opaque = {0x0, 
      0xdf258f54, 0xc05acc41}}, v_size = 1345503, v_writesize = 1345503, 
  v_iflag = 20480, v_vflag = 0, v_uflag = 0, v_numoutput = 2, 
  v_writecount = 1, v_holdcnt = 1, v_synclist_slot = 22, v_mount = 0xd750e004, 
  v_op = 0xd6f37ee4, v_freelist = {tqe_next = 0xd9af2648, 
    tqe_prev = 0xc05ea3d8}, v_freelisthd = 0x0, v_mntvnodes = {
    tqe_next = 0xd7a470e4, tqe_prev = 0xd750e00c}, v_cleanblkhd = {
    lh_first = 0x0}, v_dirtyblkhd = {lh_first = 0x0}, v_synclist = {
    tqe_next = 0x0, tqe_prev = 0xd5ab0d54}, v_dnclist = {lh_first = 0x0}, 
  v_nclist = {lh_first = 0x0}, v_un = {vu_mountedhere = 0x0, vu_socket = 0x0, 
    vu_specnode = 0x0, vu_fifoinfo = 0x0, vu_ractx = 0x0}, v_type = VREG, 
  v_tag = VT_PUFFS, v_lock = {rw_owner = 3631299239}, v_data = 0xde314444, 
  v_klist = {slh_first = 0x0}}

>How-To-Repeat:

>Fix:


>Release-Note:

>Audit-Trail:
From: Antti Kantee <pooka@cs.hut.fi>
To: gnats-bugs@netbsd.org
Cc: 
Subject: Re: kern/44240
Date: Thu, 16 Dec 2010 11:41:05 +0200

 hi,

 All server waiters should be released in puffs_userdead() which is called
 from puffs_msgif_close() before dounmount().

 I'm quite quite sure "server dies in write" used to work correctly when
 I was developing puffs-based file systems.  Maybe there's some error
 branch which doesn't release busy pages or some biodone() is missed?

 -- 
 älä karot toivorikkauttas, kyl rätei ja lumpui piisaa

State-Changed-From-To: open->closed
State-Changed-By: yamt@NetBSD.org
State-Changed-When: Fri, 11 Feb 2011 09:16:21 +0000
State-Changed-Why:
fixed


From: "YAMAMOTO Takashi" <yamt@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/44240 CVS commit: src/sys/fs/puffs
Date: Fri, 11 Feb 2011 09:15:45 +0000

 Module Name:	src
 Committed By:	yamt
 Date:		Fri Feb 11 09:15:45 UTC 2011

 Modified Files:
 	src/sys/fs/puffs: puffs_msgif.c

 Log Message:
 puffs_msg_wait: check PARKFLAG_HASERROR before PARKFLAG_CALL.  PR/44240.


 To generate a diff of this commit:
 cvs rdiff -u -r1.84 -r1.85 src/sys/fs/puffs/puffs_msgif.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.