diff options
author | Amir Goldstein <amir73il@gmail.com> | 2017-06-21 15:28:51 +0300 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2017-07-04 23:03:16 +0300 |
commit | a015dafcaf5b0316654a39bc598a76804595af90 (patch) | |
tree | 1a7e80fd1904519c9642b6549ad9f32bd5ab4d96 /fs/overlayfs/super.c | |
parent | 13c72075ac9f5a5cf3f61c85adaafffe48a6f797 (diff) | |
download | linux-a015dafcaf5b0316654a39bc598a76804595af90.tar.xz |
ovl: use ovl_inode mutex to synchronize concurrent copy up
Use the new ovl_inode mutex to synchonize concurrent copy up
instead of the super block copy up workqueue.
Moving the synchronization object from the overlay dentry to
the overlay inode is needed for synchonizing concurrent copy up
of lower hardlinks to the same upper inode.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs/overlayfs/super.c')
-rw-r--r-- | fs/overlayfs/super.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 7c7b946b063f..b0d539af1fad 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -173,6 +173,7 @@ static struct inode *ovl_alloc_inode(struct super_block *sb) oi->flags = 0; oi->__upperdentry = NULL; oi->lower = NULL; + mutex_init(&oi->lock); return &oi->vfs_inode; } @@ -190,6 +191,7 @@ static void ovl_destroy_inode(struct inode *inode) dput(oi->__upperdentry); kfree(oi->redirect); + mutex_destroy(&oi->lock); call_rcu(&inode->i_rcu, ovl_i_callback); } @@ -782,7 +784,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) if (!ufs) goto out; - init_waitqueue_head(&ufs->copyup_wq); ufs->config.redirect_dir = ovl_redirect_dir_def; err = ovl_parse_opt((char *) data, &ufs->config); if (err) |