ovl: add ovl_dentry_is_whiteout()
authorMiklos Szeredi <mszeredi@redhat.com>
Fri, 16 Dec 2016 10:02:55 +0000 (11:02 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 16 Dec 2016 10:02:55 +0000 (11:02 +0100)
And use it instead of ovl_dentry_is_opaque() where appropriate.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/dir.c
fs/overlayfs/overlayfs.h
fs/overlayfs/super.c

index fdc7b14ab5719d3fa177a09ab702333b2fa07006..b559221b2d34dc3532f0dc080c9603b4361fc492 100644 (file)
@@ -504,7 +504,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
                put_cred(override_creds(override_cred));
                put_cred(override_cred);
 
-               if (!ovl_dentry_is_opaque(dentry))
+               if (!ovl_dentry_is_whiteout(dentry))
                        err = ovl_create_upper(dentry, inode, stat, link,
                                                hardlink);
                else
@@ -842,14 +842,14 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
 
        if (overwrite) {
                if (old_opaque) {
-                       if (new->d_inode || !new_opaque) {
+                       if (!ovl_dentry_is_whiteout(new)) {
                                /* Whiteout source */
                                flags |= RENAME_WHITEOUT;
                        } else {
                                /* Switch whiteouts */
                                flags |= RENAME_EXCHANGE;
                        }
-               } else if (is_dir && !new->d_inode && new_opaque) {
+               } else if (is_dir && ovl_dentry_is_whiteout(new)) {
                        flags |= RENAME_EXCHANGE;
                        cleanup_whiteout = true;
                }
index 95d0d86c2d54c2ea4474d4e8c88ca94dd79dd22c..51e7d58276ce84e713484fc678c36420ebe2b12b 100644 (file)
@@ -161,6 +161,7 @@ struct dentry *ovl_workdir(struct dentry *dentry);
 int ovl_want_write(struct dentry *dentry);
 void ovl_drop_write(struct dentry *dentry);
 bool ovl_dentry_is_opaque(struct dentry *dentry);
+bool ovl_dentry_is_whiteout(struct dentry *dentry);
 void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque);
 bool ovl_is_whiteout(struct dentry *dentry);
 const struct cred *ovl_override_creds(struct super_block *sb);
index e296312005ccd3a5889ac48c984ba6dfd35ae047..aa0427dabea85bf6ceba926733c7e7523d4bfd99 100644 (file)
@@ -209,6 +209,11 @@ bool ovl_dentry_is_opaque(struct dentry *dentry)
        return oe->opaque;
 }
 
+bool ovl_dentry_is_whiteout(struct dentry *dentry)
+{
+       return !dentry->d_inode && ovl_dentry_is_opaque(dentry);
+}
+
 void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque)
 {
        struct ovl_entry *oe = dentry->d_fsdata;