From: "Myklebust, Trond" <Trond.Myklebust@netapp.com>
To: "J. Bruce Fields" <bfields@redhat.com>, <trond@netapp.com>
Cc: <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] nfs: open-associated setattr shouldn't invalidate own cache
Date: Mon, 18 Jul 2011 20:09:15 -0400 [thread overview]
Message-ID: <02f301cc45a8$1ad15db6$78be630a@hq.netapp.com> (raw)
We should already optimize away the unnecessary setting of the size. The problem is that truncate() still requires you to set the ctime, whereas ftruncate() does not iirc.
"J. Bruce Fields" <bfields@redhat.com> wrote:
From: "J. Bruce Fields" <bfields@redhat.com>
We recently noticed that NFSv4 iozone read tests that should have been
performing at local-cache speeds were running at wire speeds, and found
that currently,
open(O_RDWR|O_TRUNC)
write()
close()
open(O_RDONLY)
read()
results in an over-the-wire read (due to a setattr triggered by
O_TRUNC). Even non-O_TRUNC opens send setattrs (of timestamps) in some
cases, causing the same problem.
In discussion with Trond, he blames a VFS bug for breaking what should
be a single open into an open followed by a setattr.
However, it may make sense even in a case like
open(O_RDWR)
write()
setattr()
close()
open(O_RDONLY)
read()
to treat the setattr similarly to the write, and not invalidate the
client's own cache as long as the setattr is performed under a write
open.
(That said, I don't know if this is the correct place in the code to
implement that behavior.)
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
---
fs/nfs/inode.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 6f4850d..d4eed06 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -438,8 +438,13 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0)
nfs_inode_return_delegation(inode);
error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
- if (error == 0)
+ if (error)
+ goto out_free;
+ if (attr->ia_valid & ATTR_FILE)
+ nfs_post_op_update_inode_force_wcc(inode, fattr);
+ else
nfs_refresh_inode(inode, fattr);
+out_free:
nfs_free_fattr(fattr);
out:
return error;
--
1.7.6
next reply other threads:[~2011-07-19 0:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-19 0:09 Myklebust, Trond [this message]
2011-11-01 20:27 ` [PATCH] nfs: open-associated setattr shouldn't invalidate own cache J. Bruce Fields
2011-11-01 23:07 ` Myklebust, Trond
2011-11-02 0:43 ` Jeff Layton
2011-11-02 1:23 ` J. Bruce Fields
2011-11-02 1:36 ` Myklebust, Trond
2011-11-02 11:07 ` Jeff Layton
2011-11-02 14:46 ` J. Bruce Fields
2011-11-02 15:54 ` Jeff Layton
2011-11-03 20:44 ` J. Bruce Fields
2011-11-03 21:03 ` Trond Myklebust
2011-11-03 21:20 ` J. Bruce Fields
2011-11-03 21:39 ` Trond Myklebust
-- strict thread matches above, loose matches on Subject: below --
2011-07-18 22:23 J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='02f301cc45a8$1ad15db6$78be630a@hq.netapp.com' \
--to=trond.myklebust@netapp.com \
--cc=bfields@redhat.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trond@netapp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).