summaryrefslogtreecommitdiffstats
path: root/fs/overlayfs/copy_up.c
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2020-04-03 08:43:12 +0300
committerMiklos Szeredi <mszeredi@redhat.com>2020-05-13 11:11:24 +0200
commit773cb4c56b1bedeb5644f5bd06b76e348bb21634 (patch)
tree4f69b2f286fd627c81fe4f351da8a31699e78d5c /fs/overlayfs/copy_up.c
parent3011645b5b061e99cf0f024b3260ec506f91b27c (diff)
downloadlinux-773cb4c56b1bedeb5644f5bd06b76e348bb21634.tar.bz2
ovl: prepare to copy up without workdir
With index=on, we copy up lower hardlinks to work dir and move them into index dir. Fix locking to allow work dir and index dir to be the same directory. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs/overlayfs/copy_up.c')
-rw-r--r--fs/overlayfs/copy_up.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 9709cf22cab3..66004534bd40 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -584,9 +584,10 @@ static int ovl_copy_up_workdir(struct ovl_copy_up_ctx *c)
.link = c->link
};
- err = ovl_lock_rename_workdir(c->workdir, c->destdir);
- if (err)
- return err;
+ /* workdir and destdir could be the same when copying up to indexdir */
+ err = -EIO;
+ if (lock_rename(c->workdir, c->destdir) != NULL)
+ goto unlock;
err = ovl_prep_cu_creds(c->dentry, &cc);
if (err)