]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ovl: set the ORIGIN type flag
authorAmir Goldstein <amir73il@gmail.com>
Sun, 23 Apr 2017 20:12:34 +0000 (23:12 +0300)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 5 May 2017 09:38:58 +0000 (11:38 +0200)
For directory entries, non zero oe->numlower implies OVL_TYPE_MERGE.
Define a new type flag OVL_TYPE_ORIGIN to indicate that an entry holds a
reference to its lower copy up origin.

For directory entries ORIGIN := MERGE && UPPER. For non-dir entries ORIGIN
means that a lower type dentry has been recently copied up or that we were
able to find the copy up origin from overlay.origin xattr.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/overlayfs.h
fs/overlayfs/util.c

index 77405e27cd64745f75cbf9d382cc71cd2ce40dd1..98af198286950355ae218b1fa53a88e49a27255b 100644 (file)
 enum ovl_path_type {
        __OVL_PATH_UPPER        = (1 << 0),
        __OVL_PATH_MERGE        = (1 << 1),
+       __OVL_PATH_ORIGIN       = (1 << 2),
 };
 
 #define OVL_TYPE_UPPER(type)   ((type) & __OVL_PATH_UPPER)
 #define OVL_TYPE_MERGE(type)   ((type) & __OVL_PATH_MERGE)
+#define OVL_TYPE_ORIGIN(type)  ((type) & __OVL_PATH_ORIGIN)
 
 #define OVL_XATTR_PREFIX XATTR_TRUSTED_PREFIX "overlay."
 #define OVL_XATTR_OPAQUE OVL_XATTR_PREFIX "opaque"
index 2bd4c264ccbefca9caccf9c3613149068c5d6135..1c1b6ea7bf7c8316d703d2daed516e5ec2cdf94e 100644 (file)
@@ -83,11 +83,13 @@ enum ovl_path_type ovl_path_type(struct dentry *dentry)
                type = __OVL_PATH_UPPER;
 
                /*
-                * Non-dir dentry can hold lower dentry from previous
-                * location.
+                * Non-dir dentry can hold lower dentry of its copy up origin.
                 */
-               if (oe->numlower && d_is_dir(dentry))
-                       type |= __OVL_PATH_MERGE;
+               if (oe->numlower) {
+                       type |= __OVL_PATH_ORIGIN;
+                       if (d_is_dir(dentry))
+                               type |= __OVL_PATH_MERGE;
+               }
        } else {
                if (oe->numlower > 1)
                        type |= __OVL_PATH_MERGE;