|
@@ -87,21 +87,7 @@ static int utimes_common(struct path *path, struct timespec *times)
|
|
|
*/
|
|
|
newattrs.ia_valid |= ATTR_TIMES_SET;
|
|
|
} else {
|
|
|
- /*
|
|
|
- * If times is NULL (or both times are UTIME_NOW),
|
|
|
- * then we need to check permissions, because
|
|
|
- * inode_change_ok() won't do it.
|
|
|
- */
|
|
|
- error = -EPERM;
|
|
|
- if (IS_IMMUTABLE(inode))
|
|
|
- goto mnt_drop_write_and_out;
|
|
|
-
|
|
|
- error = -EACCES;
|
|
|
- if (!inode_owner_or_capable(inode)) {
|
|
|
- error = inode_permission(inode, MAY_WRITE);
|
|
|
- if (error)
|
|
|
- goto mnt_drop_write_and_out;
|
|
|
- }
|
|
|
+ newattrs.ia_valid |= ATTR_TOUCH;
|
|
|
}
|
|
|
retry_deleg:
|
|
|
inode_lock(inode);
|
|
@@ -113,7 +99,6 @@ retry_deleg:
|
|
|
goto retry_deleg;
|
|
|
}
|
|
|
|
|
|
-mnt_drop_write_and_out:
|
|
|
mnt_drop_write(path->mnt);
|
|
|
out:
|
|
|
return error;
|