Re: [RFC PATCH 4/4] If 'wsync' pass datasync=1 to vfs_fsync().

Trond Myklebust
2010-02-04T18:52:30Z

On Thu, 2010-02-04 at 13:40 -0500, Christoph Hellwig wrote:
> On Thu, Feb 04, 2010 at 01:38:00PM -0500, Trond Myklebust wrote:
> > > Indeed, both write_inode_now and vfs_fsync will also cause data to
> > > be written. But my understanding of nfsd is that we manage the data
> > > writeout separately anyway and we care about the metadata here, which
> > > the placement of these calls would suggest:
> > >
> > > - nfsd_setattr for attribute updates
> > > - nfsd_create for creating a new file (of any type)
> > > - nfsd_link for adding a new link
> >
> > Yes. Most operations in NFS are required to be synchronous (the only
> > exception being "unstable" write requests), and so those
> > fsync/write_inode_now calls are there in order to ensure that the
> > metadata and/or directory contents that were changed hits the disk
> > before the RPC call completes.
>
> Yeah. But currently both the fsync and write_inode_now calls will force
> those unstable writes to disk. I'm not sure if that is an intentional
> or unintentional side-effect of those metadata operations.

Syncing the unstable writes before the client sends a COMMIT request is
completely unnecessary. If we can avoid that, then that might indeed
give a performance boost for some workloads.

Cheers
Trond