From: David S. <ds...@ja...> - 2007-01-25 19:03:24
|
On Thu, Jan 25, 2007 at 07:31:27PM +0100, Miklos Szeredi wrote: > > > Fuse does writes synchronously so this reordering must be coming from > > > NFS. Try the 'sync' mount option for the NFS filesystem. > > > > We are using 'sync'. I'm not sure I understand your comment about > > synchronous writes. There are three writes in the above example, and > > none are being rearranged. It's the two getattrs that are being > > swapped. > > I assumed the first GETATTR was coming from the stat() call, and was > mixed up with the writes, which means, that the write call wasn't > synchronous. I don't know where the second GETATTR is coming from. Over NFS, there is not a one to one correspondance between calling stat() on the client and getting a GETATTR in the filesystem. NFS seems to call GETATTR every now and then for its own purposes. In the example, I belive the second GETATTR is from the stat() call. The first one is from NFS. Both GETATTRs are returning the correct answer for the moment when they were issued. It's just that the first GETATTR being answered after the second one is confusing things. > What you could also try is implement the flush() method and see where > that gets called. NFS doesn't call flush(). It calls fsync() instead, which corresponds to NFS COMMIT. I didn't show it in the example I gave, but there is a COMMIT after the last write. It's not related to the GETATTRs (I have runs where it happens before or after them). David |