ovl: add ovl_allow_offline_changes() helper
authorVyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com>
Thu, 27 May 2021 17:45:46 +0000 (19:45 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Tue, 17 Aug 2021 09:47:44 +0000 (11:47 +0200)
Allows to check whether any of extended features are enabled

Signed-off-by: Vyacheslav Yurkov <Vyacheslav.Yurkov@bruker.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/overlayfs.h
fs/overlayfs/super.c

index 2433cc0..e9b3e78 100644 (file)
@@ -263,6 +263,18 @@ static inline bool ovl_open_flags_need_copy_up(int flags)
        return ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC));
 }
 
+static inline bool ovl_allow_offline_changes(struct ovl_fs *ofs)
+{
+       /*
+        * To avoid regressions in existing setups with overlay lower offline
+        * changes, we allow lower changes only if none of the new features
+        * are used.
+        */
+       return (!ofs->config.index && !ofs->config.metacopy &&
+               !ofs->config.redirect_dir && ofs->config.xino != OVL_XINO_ON);
+}
+
+
 /* util.c */
 int ovl_want_write(struct dentry *dentry);
 void ovl_drop_write(struct dentry *dentry);
index 97ea35f..178daa5 100644 (file)
@@ -1599,9 +1599,7 @@ static bool ovl_lower_uuid_ok(struct ovl_fs *ofs, const uuid_t *uuid)
         * user opted-in to one of the new features that require following the
         * lower inode of non-dir upper.
         */
-       if (!ofs->config.index && !ofs->config.metacopy &&
-           !ofs->config.redirect_dir && ofs->config.xino != OVL_XINO_ON &&
-           uuid_is_null(uuid))
+       if (ovl_allow_offline_changes(ofs) && uuid_is_null(uuid))
                return false;
 
        for (i = 0; i < ofs->numfs; i++) {