diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c index 8546384a5fdf..edd5979aca4f 100644 --- a/fs/overlayfs/dir.c +++ b/fs/overlayfs/dir.c @@ -926,9 +926,13 @@ static int ovl_rename2(struct inode *olddir, struct dentry *old, goto out_dput; } } else { - if (!d_is_negative(newdentry) && - (!new_opaque || !ovl_is_whiteout(newdentry))) - goto out_dput; + if (!d_is_negative(newdentry)) { + if (!new_opaque || !ovl_is_whiteout(newdentry)) + goto out_dput; + } else { + if (flags & RENAME_EXCHANGE) + goto out_dput; + } } if (olddentry == trap)