All of lore.kernel.org
 help / color / mirror / Atom feed
* nfs_file_flush() question
@ 2008-08-17  0:23 Quentin Barnes
  2008-08-17 17:04 ` Trond Myklebust
  0 siblings, 1 reply; 7+ messages in thread
From: Quentin Barnes @ 2008-08-17  0:23 UTC (permalink / raw)
  To: linux-nfs

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?

Quentin

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-08-20  3:39 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-17  0:23 nfs_file_flush() question Quentin Barnes
2008-08-17 17:04 ` Trond Myklebust
2008-08-18 16:04   ` Chuck Lever
2008-08-18 16:53     ` Trond Myklebust
2008-08-19 20:17   ` Quentin Barnes
2008-08-20  0:30     ` Trond Myklebust
2008-08-20  3:38       ` Quentin Barnes

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.