Skip site navigation (1)Skip section navigation (2)
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>