[OpenAFS-devel] reproducible problem during cache flush

Nickolai Zeldovich kolya@MIT.EDU
Tue, 30 Jul 2002 13:52:16 -0400


> hmm... i seem to recall a problem with partial writes that derrick
> was trying to debug.  at some point i think the calls to afs_DoPartialWrite
> aren't enabled AFS_VM_RDWR_ENV.  perhaps config shouldnt claim linux is
> AFS_VM_RDWR_ENV?  this does seem to fix the problem.  atleast iozone
> passes.

Oh, so turns out my original statement wasn't quite correct; we do
call afs_DoPartialWrite on Linux (I was confused by the 64BIT_CLIENT
#ifdef's).  However, we only call it once after the entire write op
has been executed.  On Solaris, we call afs_DoPartialWrite every time
through the write loop (i.e. after each chunk, I think).  And turning
off AFS_VM_RDWR_ENV causes afs_UFSWrite to call afs_DoPartialWrite
each time through the loop.

Maybe we want to remove the #ifdef AFS_VM_RDWR_ENV in afs_UFSWrite
entirely, since there's no way for the upper-level write routine like
afs_linux_write to call afs_DoPartialWrite at the right time (i.e.
between chunks in the middle of the write process)?

On a slightly related note, I also noticed that the Linux client never
calls afs_PrefetchChunk.  We probably want to copy the afs_PrefetchChunk
invocation from some other VM-based platform into afs_linux_read or
somesuch..

-- kolya