On Thu Apr 22 14:45:38 EDT 2010, st...@quintile.net wrote:
> replica uses fcp which works multithreaded for speed. 
> 
> Perhaps the implementation of fswrite() #Z in 9vx uses a seek()
> followed by a write() rather than pwrite() which is not thread safe.

replica actually uses replica/applylog.c:^/worker internally, not
fcp.  but essentially, it's the same thing.  it copies NBUF=8192
bytes at a time with 16 parallel processes.  #Z uses pwrite on non-sockets.

in theory, since NBUF < SSIZE_MAX, pwrite should be atomic
to normal files.

you're not using a fuse-based fs, are you?

possible ways to debug:
1.  reduce NBUF to PIPE_BUF=4096.  guard against someone treating
the fd as a pipe.
2.  put a qlock in the UnixFd structure in devfs-posix.c.  lock for all io.

- erik

Reply via email to