Commit 89a17556 authored by Amir Goldstein's avatar Amir Goldstein Committed by Miklos Szeredi

ovl: cleanup dir index when dir nlink drops to zero

When non-dir index union nlink drops to zero the non-dir index
is cleaned. Do the same for directory type index entries when
union directory is removed.
Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 016b720f
...@@ -500,7 +500,7 @@ static void ovl_cleanup_index(struct dentry *dentry) ...@@ -500,7 +500,7 @@ static void ovl_cleanup_index(struct dentry *dentry)
goto fail; goto fail;
inode = d_inode(upperdentry); inode = d_inode(upperdentry);
if (inode->i_nlink != 1) { if (!S_ISDIR(inode->i_mode) && inode->i_nlink != 1) {
pr_warn_ratelimited("overlayfs: cleanup linked index (%pd2, ino=%lu, nlink=%u)\n", pr_warn_ratelimited("overlayfs: cleanup linked index (%pd2, ino=%lu, nlink=%u)\n",
upperdentry, inode->i_ino, inode->i_nlink); upperdentry, inode->i_ino, inode->i_nlink);
/* /*
...@@ -549,7 +549,7 @@ int ovl_nlink_start(struct dentry *dentry, bool *locked) ...@@ -549,7 +549,7 @@ int ovl_nlink_start(struct dentry *dentry, bool *locked)
const struct cred *old_cred; const struct cred *old_cred;
int err; int err;
if (!d_inode(dentry) || d_is_dir(dentry)) if (!d_inode(dentry))
return 0; return 0;
/* /*
...@@ -576,7 +576,7 @@ int ovl_nlink_start(struct dentry *dentry, bool *locked) ...@@ -576,7 +576,7 @@ int ovl_nlink_start(struct dentry *dentry, bool *locked)
if (err) if (err)
return err; return err;
if (!ovl_test_flag(OVL_INDEX, d_inode(dentry))) if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
goto out; goto out;
old_cred = ovl_override_creds(dentry->d_sb); old_cred = ovl_override_creds(dentry->d_sb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment