ovl: update cache version of impure parent on rename
authorAmir Goldstein <amir73il@gmail.com>
Wed, 1 Nov 2017 15:33:13 +0000 (17:33 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 9 Nov 2017 09:23:27 +0000 (10:23 +0100)
ovl_rename() updates dir cache version for impure old parent if an entry
with copy up origin is moved into old parent, but it did not update
cache version if the entry moved out of old parent has a copy up origin.

[SzM] Same for new dir: we updated the version if an entry with origin was
moved in, but not if an entry with origin was moved out.

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

index ef533198be45356a871d4b5be91d610854376b39..e13921824c70ce8061e545f21e408eda478d7644 100644 (file)
@@ -1075,9 +1075,10 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
                        drop_nlink(d_inode(new));
        }
 
-       ovl_dentry_version_inc(old->d_parent,
-                              !overwrite && ovl_type_origin(new));
-       ovl_dentry_version_inc(new->d_parent, ovl_type_origin(old));
+       ovl_dentry_version_inc(old->d_parent, ovl_type_origin(old) ||
+                              (!overwrite && ovl_type_origin(new)));
+       ovl_dentry_version_inc(new->d_parent, ovl_type_origin(old) ||
+                              (d_inode(new) && ovl_type_origin(new)));
 
 out_dput:
        dput(newdentry);