That fixes it for me. Iozone running REALLY slow, but that's completely to be expected with such a tiny cache. It does correctly handle the cache full situation now without any hangs.
I've got watchdog turned off temporarily on my samba servers, hopefully one of them will crash (how often do you hear that?) and I'll be able to do the kdump to see if it might be the same symptom. If it is, I'll try putting this build on them. -- Nathan ------------------------------------------------------------ Nathan Neulinger EMail: [EMAIL PROTECTED] University of Missouri - Rolla Phone: (573) 341-4841 Computing Services Fax: (573) 341-4216 > -----Original Message----- > From: Nickolai Zeldovich [mailto:[EMAIL PROTECTED]] > Sent: Tuesday, July 30, 2002 1:55 PM > To: [EMAIL PROTECTED] > Subject: Re: [OpenAFS-devel] reproducible problem during cache flush > > > > Applying this (with hand fixes to get it to apply on the > trunk + protos > > branches, which have some locking+dcache changes in that > vicinity) does > > NOT appear to fix the problem for me. > > Ah, I think I see at least one problem: we were failing to release > our own write-locked dcache entry before calling afs_DoPartialWrite. > Since dcache locking isn't on the 1.2.x branch, Chas didn't run into > the same problem. Here's a cummulative diff against the trunk that > fixes at least that bug; see if you find any more? :-) > > -- kolya > > --- src/afs/VNOPS/afs_vnop_read.c 2002/07/13 03:28:28 1.14 > +++ src/afs/VNOPS/afs_vnop_read.c 2002/07/30 18:51:43 > @@ -330,7 +330,7 @@ > */ > if (tdc) { > ReleaseReadLock(&tdc->lock); > -#ifndef AFS_VM_RDWR_ENV > +#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) > /* try to queue prefetch, if needed */ > if (!noLock) { > afs_PrefetchChunk(avc, tdc, acred, &treq); > @@ -559,7 +559,7 @@ > > if (!noLock) { > ReleaseReadLock(&avc->lock); > -#ifndef AFS_VM_RDWR_ENV > +#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) > if (!(code = afs_InitReq(&treq, acred))) { > if (!(tdc->mflags & DFNextStarted)) > afs_PrefetchChunk(avc, tdc, acred, &treq); > @@ -982,7 +982,7 @@ > */ > if (tdc) { > ReleaseReadLock(&tdc->lock); > -#ifndef AFS_VM_RDWR_ENV > +#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) > /* try to queue prefetch, if needed */ > if (!noLock) { > if (!(tdc->mflags & DFNextStarted)) > > --- src/afs/VNOPS/afs_vnop_write.c 2002/04/02 17:35:03 1.20 > +++ src/afs/VNOPS/afs_vnop_write.c 2002/07/30 18:51:43 > @@ -297,7 +297,9 @@ > avc->m.Length = filePos; > } > #endif > -#ifndef AFS_VM_RDWR_ENV > + ReleaseWriteLock(&tdc->lock); > + afs_PutDCache(tdc); > +#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) > /* > * If write is implemented via VM, afs_DoPartialWrite() > is called from > * the high-level write op. > @@ -306,14 +308,10 @@ > code = afs_DoPartialWrite(avc, &treq); > if (code) { > error = code; > - ReleaseWriteLock(&tdc->lock); > - afs_PutDCache(tdc); > break; > } > } > #endif > - ReleaseWriteLock(&tdc->lock); > - afs_PutDCache(tdc); > } > #ifndef AFS_VM_RDWR_ENV > afs_FakeClose(avc, acred); > @@ -618,7 +616,9 @@ > } > #endif > osi_UFSClose(tfile); > -#ifndef AFS_VM_RDWR_ENV > + ReleaseWriteLock(&tdc->lock); > + afs_PutDCache(tdc); > +#if !defined(AFS_VM_RDWR_ENV) || defined(AFS_LINUX22_ENV) > /* > * If write is implemented via VM, afs_DoPartialWrite() > is called from > * the high-level write op. > @@ -627,14 +627,10 @@ > code = afs_DoPartialWrite(avc, &treq); > if (code) { > error = code; > - ReleaseWriteLock(&tdc->lock); > - afs_PutDCache(tdc); > break; > } > } > #endif > - ReleaseWriteLock(&tdc->lock); > - afs_PutDCache(tdc); > } > #ifndef AFS_VM_RDWR_ENV > afs_FakeClose(avc, acred); > _______________________________________________ > OpenAFS-devel mailing list > [EMAIL PROTECTED] > https://lists.openafs.org/mailman/listinfo/openafs-devel > _______________________________________________ OpenAFS-devel mailing list [EMAIL PROTECTED] https://lists.openafs.org/mailman/listinfo/openafs-devel
