Date: 02 Dec 1998 10:23:01 -0500 From: "Robert V. Baron" <rvb@cs.cmu.edu> To: vallo@matti.ee Cc: Forrest Aldrich <forrie@forrie.com>, freebsd-current@FreeBSD.ORG, Terry Lambert <tlambert@primenet.com>, "John S. Dyson" <dyson@iquest.net> Subject: Re: CODA on FreeBSD-CURRENT ... an interesting vm bug Message-ID: <yzsogpmk1pm.fsf_-_@sicily.odyssey.cs.cmu.edu> In-Reply-To: Vallo Kallaste's message of Wed, 25 Nov 1998 14:22:49 %2B0200 References: <4.1.19981123122653.00abfe40@206.25.93.69> <19981125142249.B38959@matti.ee>
next in thread | previous in thread | raw e-mail | index | archive | help
Well, the bug is not that interesting ...
I tried cvsup into coda on a 11/05 kernel. Doing cvsup'ing src
worked, but then I switched the tag from RELENG_2_2 to . and
the system crashed ...
panic: lockmgr: pid -2, not exclusive lock holder 23390 unlocking
Debugger("panic")
The stack trace looks like:
db> tr
_Debugger(f0123a7b) at _Debugger+0x35
_panic(f011f0b1,fffffffe,f011f09b,5b5e,f419cd8c) at _panic+0x6f
_lockmgr(f08cbe00,6,f41897f0,0,f419cc84) at _lockmgr+0x2b3
_vop_stdunlock(f419cd18,f419cd2c,f01076b7,f419cd18,f419cd70) at _vop_stdunlock+0x23
_ufs_vnoperate(f419cd18) at _ufs_vnoperate+0x15
_coda_rdwr(f421ef00,f419cd8c,0,0,f079c780) at _coda_rdwr+0x10f
_coda_read(f419cd70,0,1,0,166) at _coda_read+0x50
_vnode_pager_input_old(f41c03b8,f043c858,f421ef00,1000,0) at _vnode_pager_input_old+0xf2
_vnode_pager_generic_getpages(f421ef00,f419cf18,1000,0,f419ce88) at _vnode_pager_generic_getpages+0xea
_coda_fbsd_getpages(f419ce6c) at _coda_fbsd_getpages+0x17
_vnode_pager_getpages(f41c03b8,f419cf18,1,0,f419cf58) at _vnode_pager_getpages+0x4e
_vm_pager_get_pages(f41c03b8,f419cf18,1,0) at _vm_pager_get_pages+0x1f
_vm_fault(f40b1800,201f7000,1,0,f40ad080) at _vm_fault+0x464
_trap_pfault(f419cfbc,1) at _trap_pfault+0xf6
_trap(27,27,26f1cc,0,567a60) at _trap+0x137
calltrap() at calltrap+0x1c
What is happening here is that coda_rdwr does a VFS_VGET to get a
vnode the hardway. The vnode comes back locked (probably thru vget)
and is locked by the process "curproc" (cvsup in this case). But
coda_rdwr needs to unlock the vnode. It gets its process pointer
from the uio_procp field of the uio argument. Well
vnode_pager_input_old sets this field to 0 ... not curproc! Thus
the unlock fails with the panic above.
moral: vnode_pager_input_old gets called in a process context so it
should use curproc not 0 as its procp.
I fixed a different coda/related bug in vnode_pager_input_coda
earlier, so if there are no major objections I will commit this
change Fri noon. With the earlier bug (look in the "current" archives
for vnode_pager_input_old around Sep 28.), I determined that only
coda used vnode_pager_input_old, so I don't expect this change to
effect anyone besides Coda.
Vallo Kallaste <vallo@matti.ee> writes:
> Forrest Aldrich <forrie@forrie.com> wrote:
>
> > Wondered about anyone's experience with CODA on FreeBSD-CURRENT.
> > I see that vinum and some other stuff is included in the source tree, but want
> > to find out more about people's experience (good and bad) with these. Are
> > they stable, etc.
>
> I have tried CODA on current-elf machines. One acts as server and
> one as a client :-) , but my client machine crash everytime I run
> cvsup on /coda mounted /usr/src. As the cvsup crashes client
> machine everytime, I mark coda as unstable for me and don't spend
> any more time, althought it seems very interesting and suitable for
> our needs. Maybe I should try an aout version instead, because it's
> better supported and tested ? Anyone knowledgeable ?
>
>
> Vallo Kallaste
> vallo@matti.ee
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-current" in the body of the message
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?yzsogpmk1pm.fsf_-_>
