Subject: Re: kern/37576: Reader / writer lock error
To: None <gnats-bugs@NetBSD.org>
From: Patrick Welche <prlw1@newn.cam.ac.uk>
List: netbsd-bugs
Date: 12/21/2007 13:05:24
On Thu, Dec 20, 2007 at 07:20:03PM +0000, Antti Kantee wrote:
> The following reply was made to PR kern/37576; it has been noted by GNATS.
>
> From: Antti Kantee <pooka@cs.hut.fi>
> To: prlw1@cam.ac.uk
> Cc: gnats-bugs@netbsd.org
> Subject: Re: kern/37576: Reader / writer lock error
> Date: Thu, 20 Dec 2007 21:15:07 +0200
>
> On Thu Dec 20 2007 at 18:20:00 +0000, prlw1@cam.ac.uk wrote:
> > mount -t cd9660 /dev/cd1a /cdrom
> >
> > gives the panic:
> >
> > Reader / writer lock error: lockdebug_alloc: already initialized
> >
> > lock address : 0x00000000d0c95f04 type : sleep/adaptive
> > shared holds : 0 exclusive: 0
> > shares wanted: 0 exclusive: 0
> > current cpu : 0 last held: 0
> > current lwp : 0x00000000cd40a8c0 last held: 000000000000000000
> > last locked : 000000000000000000 unlocked : 000000000000000000
> > initialized : 0x00000000c03b5d00
> > owner/count : 000000000000000000 flags : 000000000000000000
>
> Hmm. I started looking at cd9660_vfsops.c and I could've *sworn* that
> cd9660_vget_internal() had the call to genfs_node_init() twice one after
> another. But when I edited the extra call away, I got no cvs diff and
> I can't seem to find anything in cvs indicating it ever would have been
> there twice. I'm probably just going bananas, but check that your copy
> doesn't contain two calls.
You are absolutely right:
% cvs diff -u cd9660_vfsops.c
Index: cd9660_vfsops.c
===================================================================
RCS file: /cvsroot/src/sys/fs/cd9660/cd9660_vfsops.c,v
retrieving revision 1.52
diff -u -r1.52 cd9660_vfsops.c
--- cd9660_vfsops.c 8 Dec 2007 19:29:42 -0000 1.52
+++ cd9660_vfsops.c 21 Dec 2007 13:03:24 -0000
@@ -735,6 +735,8 @@
ip->i_devvp = imp->im_devvp;
genfs_node_init(vp, &cd9660_genfsops);
+ genfs_node_init(vp, &cd9660_genfsops);
+
/*
* Put it onto its hash chain and lock it so that other requests for
* this inode will block if they arrive while we are sleeping waiting
It was patch + cvs update - thank you!
Patrick