Re: nfs_file_flush() question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 2008-08-16 at 19:23 -0500, Quentin Barnes wrote:
> I've been coming up to speed on the NFS protocol and its NFS client
> support in Linux.  I've been comparing performance of NFS on RHEL4
> and RHEL5 vs. FreeBSD 6.2.  (Okay, we're on an old base, but I don't
> think it matters here for this question.)
> 
> In watching the NFS protocols fly back and forth between BSD
> and Linux clients to an NFS server, I noticed that Linux is
> doing an extra GETATTR over FreeBSD when closing a read-write
> file.  I tracked this back to nfs_file_flush() which is
> doing a __nfs_revalidate_inode() (or in current kernels
> nfs_revalidate_inode()).  Why do we want nfs_file_flush() to force
> a revalidate of an inode we're closing?  Why not instead just
> invalidate the inode's attribute?
> 
> I looked at the FreeBSD 6.2 code.  In its nfs_close(), it does an
> "np->n_attrstamp = 0;" to invalidate the inode's attribute cache.
> 
> The current Linux kernel code in question in nfs_file_flush() is:
> ==========
>     /* Ensure that data+attribute caches are up to date after close() */
>     status = nfs_do_fsync(ctx, inode);
>     if (!status)
>             nfs_revalidate_inode(NFS_SERVER(inode), inode);
> ==========
> 
> I would imagine this better as:
> ==========
>     /* Ensure that data+attribute caches are up to date after close() */
>     status = nfs_do_fsync(ctx, inode);
>     if (!status && !(NFS_SERVER(inode)->flags & NFS_MOUNT_NOCTO))
>             NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR;
> ==========
> 
> Is there a reason I'm missing that the revalidate and GETATTR are
> required?

Yes: It is required for correct close-to-open cache consistency
semantics.

If I don't know the correct mtime attribute of the file when I close it,
then I can't compare it with the mtime of the file when I open it again.
If so, close-to-open semantics forbid me from assuming that my cached
data is still valid, and so I have to throw out the entire page cache
contents for that file.

Cheers
  Trond

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux