In message <[EMAIL PROTECTED]>,Adam Megacz writes:
>
>Derrick J Brashear <[EMAIL PROTECTED]> writes:
>> On Wed, 3 Jan 2007, chas williams - CONTRACTOR wrote:
>>
>>> In message <[EMAIL PROTECTED]>,Adam Megacz writes:
>>>> http://www.openafs.org/pipermail/openafs-info/2006-October/023804.html
>>>
>>> cute. i suppose at this point i would put a bit of debugging in
>>> afs_remunlink() and see if its getting called. i can't see why
>>> it wouldn't. i suspect you might be having trouble with:
>>>
>>> #if defined(AFS_DARWIN80_ENV)
>>> if (vnode_get(AFSTOV(avc))) {
>>> ReleaseWriteLock(&avc->lock);
>>> return 0;
>>> }
>>> #endif
>>>
>>> vnode_get() returns an error if a vnode is marked DEAD or TERMINATE.
>>> i dont see why you wouldnt want to remove the unlinked file in this
>>> case.
>>
>> this is probably it.
>
>Unfortunately, removing that code doesn't appear to fix the problem =(
i didnt forget about this problem. it just took a bit of time to get
around to it. anyway, i believe the problem is the vnode_recycle()
when afs doesnt remove the file but instead renames it.
i dont quite understand why this is broken, but it appears that setting
VL_MARKTERM before VL_NEEDINACTIVE keeps vnode_rele_internal() from
marking the vnode with the VL_NEEDINACTIVE flag.
its likely that afs_remunlink() should be calling vnode_recycle()
as well with this fix to force the reclaim a bit sooner. that
has been left as an exercise for the reader.
--- src/afs/DARWIN/osi_vnodeops.c.000 2007-02-27 16:27:07.000000000 -0500
+++ src/afs/DARWIN/osi_vnodeops.c 2007-02-27 16:29:58.000000000 -0500
@@ -1175,6 +1175,7 @@
int error = 0;
register struct vnode *vp = ap->a_vp;
register struct vnode *dvp = ap->a_dvp;
+ struct vcache *tvc = VTOAFS(vp);
#ifdef AFS_DARWIN80_ENV
if (ap->a_flags & VNODE_REMOVE_NODELETEBUSY) {
@@ -1192,8 +1193,10 @@
cache_purge(vp);
if (!error) {
#ifdef AFS_DARWIN80_ENV
- ubc_setsize(vp, (off_t)0);
- vnode_recycle(vp);
+ if (!(tvc->states & CUnlinked)) {
+ ubc_setsize(vp, (off_t)0);
+ vnode_recycle(vp);
+ }
#else
/* necessary so we don't deadlock ourselves in vclean */
VOP_UNLOCK(vp, 0, cnp->cn_proc);
_______________________________________________
OpenAFS-devel mailing list
[email protected]
https://lists.openafs.org/mailman/listinfo/openafs-devel