diff --git a/[refs] b/[refs] index 610e14cbcdf8..c293dd9cbba1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4660897e6c2daa198fc8e3f47ae2a4aef69c80b0 +refs/heads/master: fe5a2de17e65d82b9d502da80ccb5a689d03fdd2 diff --git a/trunk/fs/utimes.c b/trunk/fs/utimes.c index 480f7c8c29da..b3c88952465f 100644 --- a/trunk/fs/utimes.c +++ b/trunk/fs/utimes.c @@ -106,9 +106,16 @@ long do_utimes(int dfd, char __user *filename, struct timespec *times, int flags if (IS_IMMUTABLE(inode)) goto dput_and_out; - if (current->fsuid != inode->i_uid && - (error = vfs_permission(&nd, MAY_WRITE)) != 0) - goto dput_and_out; + if (current->fsuid != inode->i_uid) { + if (f) { + if (!(f->f_mode & FMODE_WRITE)) + goto dput_and_out; + } else { + error = vfs_permission(&nd, MAY_WRITE); + if (error) + goto dput_and_out; + } + } } mutex_lock(&inode->i_mutex); error = notify_change(dentry, &newattrs); diff --git a/trunk/mm/filemap.c b/trunk/mm/filemap.c index edb1b0b5cc8d..d1d9814f99dd 100644 --- a/trunk/mm/filemap.c +++ b/trunk/mm/filemap.c @@ -1786,7 +1786,6 @@ struct page *read_cache_page_async(struct address_space *mapping, page = __read_cache_page(mapping, index, filler, data); if (IS_ERR(page)) return page; - mark_page_accessed(page); if (PageUptodate(page)) goto out;