Date: Sat, 19 Jan 2008 01:01:04 +0000 (GMT) From: Robert Watson <rwatson@FreeBSD.org> To: Jan Harkes <jaharkes@cs.cmu.edu> Cc: freebsd-fs@freebsd.org Subject: Re: Coda on FreeBSD problem reports? Message-ID: <20080119005938.Q53920@fledge.watson.org> In-Reply-To: <20080118211556.T46437@fledge.watson.org> References: <18CC5A4A2AC36D7FF57615EE@ganymede.hub.org> <478AF6BC.8050604@highperformance.net> <20080114142124.Y55696@fledge.watson.org> <20080116085630.GA32361@pappardelle.tekno.chalmers.se> <20080117080359.U51764@fledge.watson.org> <20080118073445.GA30721@pappardelle.tekno.chalmers.se> <20080118095652.GC30721@pappardelle.tekno.chalmers.se> <20080118103952.D18977@fledge.watson.org> <20080118210621.GF7898@cs.cmu.edu> <20080118211556.T46437@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 18 Jan 2008, Robert Watson wrote: > I've not tested it, but the attached patch may do something like what you > want. I have some reservations about this approach, though, due to the > above concerns. Well, my testbox finally rebuilt, and a casual test with an ls binary in /coda leads me to believe that exceve() now works. I've not tried any comprehensive testing of mmap(). I also saw the lockmgr panic after a second unmount, as well as an INVARIANTS report of leaked memory when I unloaded the Coda module between runs. I'll take a closer look tomorrow. Assuming you're OK with this patch as a first cut, I can commit it to FreeBSD CVS. Robert N M Watson Computer Laboratory University of Cambridge > > Robert N M Watson > Computer Laboratory > University of Cambridge > > Index: coda_vnops.c > =================================================================== > RCS file: /home/ncvs/src/sys/fs/coda/coda_vnops.c,v > retrieving revision 1.78 > diff -u -r1.78 coda_vnops.c > --- coda_vnops.c 13 Jan 2008 14:44:02 -0000 1.78 > +++ coda_vnops.c 17 Jan 2008 15:22:12 -0000 > @@ -244,6 +244,8 @@ > if (error) { > printf("coda_open: VOP_OPEN on container failed %d\n", error); > return (error); > + } else { > + (*vpp)->v_object = vp->v_object; > } > /* grab (above) does this when it calls newvnode unless it's in the cache*/ > > @@ -747,6 +749,8 @@ > > CODADEBUG(CODA_INACTIVE, myprintf(("in inactive, %s, vfsp %p\n", > coda_f2s(&cp->c_fid), vp->v_mount));) > + > + vp->v_object = NULL; > > /* If an array has been allocated to hold the symlink, deallocate it */ > if ((coda_symlink_cache) && (VALID_SYMLINK(cp))) { > @@ -1552,7 +1556,7 @@ > cache_purge(vp); > coda_free(VTOC(vp)); > vp->v_data = NULL; > - vnode_destroy_vobject(vp); > + vp->v_object = NULL; > return (0); > } > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080119005938.Q53920>