Re: [Devel] [PATCH RHEL7 COMMIT] Revert "ms/ovl: update atime on upperovl: update atime on upper"
reapplied in rh7-3.10.0-327.28.2.vz7.17.10 -- Best regards, Konstantin Khorenko, Virtuozzo Linux Kernel Team On 09/21/2016 04:54 PM, Konstantin Khorenko wrote: The commit is pushed to "branch-rh7-3.10.0-327.28.2.vz7.17.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-327.28.2.vz7.17.8 --> commit d3dc167710ea15dbbd77bb88f3d10d51e4600789 Author: Konstantin KhorenkoDate: Wed Sep 21 17:53:09 2016 +0400 Revert "ms/ovl: update atime on upperovl: update atime on upper" Temporary revert due to panic: https://jira.sw.ru/browse/PSBM-52373 This reverts commit 72814686c2596add559bba25d551af93193b0287. --- fs/overlayfs/dir.c | 1 - fs/overlayfs/inode.c | 29 +++-- fs/overlayfs/overlayfs.h | 4 fs/overlayfs/super.c | 8 ++-- 4 files changed, 5 insertions(+), 37 deletions(-) diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 881987c..5402b9b 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -966,7 +966,6 @@ const struct inode_operations_wrapper ovl_dir_inode_operations = { .getxattr = ovl_getxattr, .listxattr = ovl_listxattr, .removexattr= ovl_removexattr, - .update_time= ovl_update_time, }, .rename2= ovl_rename2, }; diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 77f2da4..5fe7acf 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -196,6 +196,8 @@ static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) if (!realinode->i_op->readlink) return -EINVAL; + touch_atime(); + return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); } @@ -381,29 +383,6 @@ struct inode *ovl_d_select_inode(struct dentry *dentry) return d_backing_inode(realpath.dentry); } -int ovl_update_time(struct inode *inode, struct timespec *ts, int flags) -{ - struct dentry *alias; - struct path upperpath; - - if (!(flags & S_ATIME)) - return 0; - - alias = d_find_any_alias(inode); - if (!alias) - return 0; - - ovl_path_upper(alias, ); - if (upperpath.dentry) { - touch_atime(); - inode->i_atime = d_inode(upperpath.dentry)->i_atime; - } - - dput(alias); - - return 0; -} - static const struct inode_operations_wrapper ovl_file_inode_operations = { .ops = { .setattr= ovl_setattr, @@ -413,7 +392,6 @@ static const struct inode_operations_wrapper ovl_file_inode_operations = { .getxattr = ovl_getxattr, .listxattr = ovl_listxattr, .removexattr= ovl_removexattr, - .update_time= ovl_update_time, }, .dentry_open= ovl_dentry_open, }; @@ -428,7 +406,6 @@ static const struct inode_operations ovl_symlink_inode_operations = { .getxattr = ovl_getxattr, .listxattr = ovl_listxattr, .removexattr= ovl_removexattr, - .update_time= ovl_update_time, }; struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, @@ -444,7 +421,7 @@ struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, inode->i_ino = get_next_ino(); inode->i_mode = mode; - inode->i_flags |= S_NOCMTIME; + inode->i_flags |= S_NOATIME | S_NOCMTIME; switch (mode) { case S_IFDIR: diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 61ba0d5..8da9684 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -174,7 +174,6 @@ ssize_t ovl_getxattr(struct dentry *dentry, const char *name, ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); int ovl_removexattr(struct dentry *dentry, const char *name); struct inode *ovl_d_select_inode(struct dentry *dentry); -int ovl_update_time(struct inode *inode, struct timespec *ts, int flags); struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, struct ovl_entry *oe); @@ -182,9 +181,6 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to) { to->i_uid = from->i_uid; to->i_gid = from->i_gid; - to->i_atime = from->i_atime; - to->i_mtime = from->i_mtime; - to->i_ctime = from->i_ctime; } /* dir.c */ diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index b46463a..2935967 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -533,7 +533,7 @@ out: struct file *ovl_path_open(struct path *path, int flags) { - return dentry_open(path, flags | O_NOATIME, current_cred()); + return dentry_open(path, flags, current_cred()); } static void ovl_put_super(struct super_block *sb) @@ -1013,10 +1013,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) pr_err("overlayfs: failed to clone upperpath\n");
[Devel] [PATCH RHEL7 COMMIT] Revert "ms/ovl: update atime on upperovl: update atime on upper"
The commit is pushed to "branch-rh7-3.10.0-327.28.2.vz7.17.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-327.28.2.vz7.17.8 --> commit d3dc167710ea15dbbd77bb88f3d10d51e4600789 Author: Konstantin KhorenkoDate: Wed Sep 21 17:53:09 2016 +0400 Revert "ms/ovl: update atime on upperovl: update atime on upper" Temporary revert due to panic: https://jira.sw.ru/browse/PSBM-52373 This reverts commit 72814686c2596add559bba25d551af93193b0287. --- fs/overlayfs/dir.c | 1 - fs/overlayfs/inode.c | 29 +++-- fs/overlayfs/overlayfs.h | 4 fs/overlayfs/super.c | 8 ++-- 4 files changed, 5 insertions(+), 37 deletions(-) diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 881987c..5402b9b 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -966,7 +966,6 @@ const struct inode_operations_wrapper ovl_dir_inode_operations = { .getxattr = ovl_getxattr, .listxattr = ovl_listxattr, .removexattr= ovl_removexattr, - .update_time= ovl_update_time, }, .rename2= ovl_rename2, }; diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index 77f2da4..5fe7acf 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c @@ -196,6 +196,8 @@ static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) if (!realinode->i_op->readlink) return -EINVAL; + touch_atime(); + return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); } @@ -381,29 +383,6 @@ struct inode *ovl_d_select_inode(struct dentry *dentry) return d_backing_inode(realpath.dentry); } -int ovl_update_time(struct inode *inode, struct timespec *ts, int flags) -{ - struct dentry *alias; - struct path upperpath; - - if (!(flags & S_ATIME)) - return 0; - - alias = d_find_any_alias(inode); - if (!alias) - return 0; - - ovl_path_upper(alias, ); - if (upperpath.dentry) { - touch_atime(); - inode->i_atime = d_inode(upperpath.dentry)->i_atime; - } - - dput(alias); - - return 0; -} - static const struct inode_operations_wrapper ovl_file_inode_operations = { .ops = { .setattr= ovl_setattr, @@ -413,7 +392,6 @@ static const struct inode_operations_wrapper ovl_file_inode_operations = { .getxattr = ovl_getxattr, .listxattr = ovl_listxattr, .removexattr= ovl_removexattr, - .update_time= ovl_update_time, }, .dentry_open= ovl_dentry_open, }; @@ -428,7 +406,6 @@ static const struct inode_operations ovl_symlink_inode_operations = { .getxattr = ovl_getxattr, .listxattr = ovl_listxattr, .removexattr= ovl_removexattr, - .update_time= ovl_update_time, }; struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, @@ -444,7 +421,7 @@ struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, inode->i_ino = get_next_ino(); inode->i_mode = mode; - inode->i_flags |= S_NOCMTIME; + inode->i_flags |= S_NOATIME | S_NOCMTIME; switch (mode) { case S_IFDIR: diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 61ba0d5..8da9684 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h @@ -174,7 +174,6 @@ ssize_t ovl_getxattr(struct dentry *dentry, const char *name, ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); int ovl_removexattr(struct dentry *dentry, const char *name); struct inode *ovl_d_select_inode(struct dentry *dentry); -int ovl_update_time(struct inode *inode, struct timespec *ts, int flags); struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, struct ovl_entry *oe); @@ -182,9 +181,6 @@ static inline void ovl_copyattr(struct inode *from, struct inode *to) { to->i_uid = from->i_uid; to->i_gid = from->i_gid; - to->i_atime = from->i_atime; - to->i_mtime = from->i_mtime; - to->i_ctime = from->i_ctime; } /* dir.c */ diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index b46463a..2935967 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -533,7 +533,7 @@ out: struct file *ovl_path_open(struct path *path, int flags) { - return dentry_open(path, flags | O_NOATIME, current_cred()); + return dentry_open(path, flags, current_cred()); } static void ovl_put_super(struct super_block *sb) @@ -1013,10 +1013,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) pr_err("overlayfs: failed to clone upperpath\n"); goto out_put_lowerpath; } - /* Don't inherit atime flags */ - ufs->upper_mnt->mnt_flags &=