The inodes index is needed also with readonly mount to find indexed lower hardlinks. Also, a readonly overlay mount can be remounted readonly and then overlay dentries in cache should already have the index entry cached. Therefore, we need to disable the inodes index feature only in case there are no upper/work dirs, and not when mounting readonly per user request. Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> --- fs/overlayfs/super.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index b53c08f70b1a..4cf18850b4de 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -251,6 +251,12 @@ static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf) return err; } +/* Will this overlay be forced to mount/remount ro? */ +static bool ovl_force_readonly(struct ovl_fs *ufs) +{ + return (!ufs->upper_mnt || !ufs->workdir); +} + /** * ovl_show_options * @@ -282,7 +288,7 @@ static int ovl_remount(struct super_block *sb, int *flags, char *data) { struct ovl_fs *ufs = sb->s_fs_info; - if (!(*flags & MS_RDONLY) && (!ufs->upper_mnt || !ufs->workdir)) + if (!(*flags & MS_RDONLY) && ovl_force_readonly(ufs)) return -EROFS; return 0; @@ -1060,7 +1066,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) else if (ufs->upper_mnt->mnt_sb != ufs->same_sb) ufs->same_sb = NULL; - if (!(sb->s_flags & MS_RDONLY) && ufs->config.index) { + if (!(ovl_force_readonly(ufs)) && ufs->config.index) { /* Verify lower root is upper root origin */ err = ovl_verify_set_origin(upperpath.dentry, ufs->lower_mnt[0], stack[0].dentry, @@ -1085,8 +1091,10 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) } else { pr_warn("overlayfs: try deleting index dir or mounting with '-o index=off' to disable inodes index.\n"); } - } + /* Show index=off/on in /proc/mounts for any of the reasons above */ + if (!ufs->indexdir) + ufs->config.index = false; if (remote) sb->s_d_op = &ovl_reval_dentry_operations; -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html