Commit 2fbace60 authored by Chuck Lever's avatar Chuck Lever Committed by Linus Torvalds

[PATCH] too many setattr calls from VFS layer

New code in 2.5 VFS layer invokes notify_change to clear the suid and
sgid bits for every write request.  notify_change needs to optimize out
calls to ->setattr that don't do anything, because for many network file
systems, an on-the-wire SETATTR request is generated for every ->setattr
call, resulting in unnecessary latency for NFS writes.
parent 20eb6a8b
......@@ -134,6 +134,7 @@ int notify_change(struct dentry * dentry, struct iattr * attr)
if (!(ia_valid & ATTR_MTIME_SET))
attr->ia_mtime = now;
if (ia_valid & ATTR_KILL_SUID) {
attr->ia_valid &= ~ATTR_KILL_SUID;
if (mode & S_ISUID) {
if (!(ia_valid & ATTR_MODE)) {
ia_valid = attr->ia_valid |= ATTR_MODE;
......@@ -143,6 +144,7 @@ int notify_change(struct dentry * dentry, struct iattr * attr)
}
}
if (ia_valid & ATTR_KILL_SGID) {
attr->ia_valid &= ~ ATTR_KILL_SGID;
if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
if (!(ia_valid & ATTR_MODE)) {
ia_valid = attr->ia_valid |= ATTR_MODE;
......@@ -151,6 +153,8 @@ int notify_change(struct dentry * dentry, struct iattr * attr)
attr->ia_mode &= ~S_ISGID;
}
}
if (!attr->ia_valid)
return 0;
if (inode->i_op && inode->i_op->setattr) {
error = security_ops->inode_setattr(dentry, attr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment