aboutsummaryrefslogtreecommitdiffstats
path: root/fs/overlayfs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-01-22 15:40:57 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2016-01-22 18:04:28 -0500
commit5955102c9984fa081b2d570cfac75c97eecf8f3b (patch)
treea4744386eac4b916e847eb4eedfada158f6527b4 /fs/overlayfs
parent57b8f112cfe6622ddddb8c2641206bb5fa8a112d (diff)
wrappers for ->i_mutex access
parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested}, inode_foo(inode) being mutex_foo(&inode->i_mutex). Please, use those for access to ->i_mutex; over the coming cycle ->i_mutex will become rwsem, with ->lookup() done with it held only shared. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/overlayfs')
-rw-r--r--fs/overlayfs/copy_up.c4
-rw-r--r--fs/overlayfs/dir.c12
-rw-r--r--fs/overlayfs/inode.c4
-rw-r--r--fs/overlayfs/readdir.c20
-rw-r--r--fs/overlayfs/super.c14
5 files changed, 27 insertions, 27 deletions
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index eff6319d5037..d894e7cd9a86 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -248,9 +248,9 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
248 if (err) 248 if (err)
249 goto out_cleanup; 249 goto out_cleanup;
250 250
251 mutex_lock(&newdentry->d_inode->i_mutex); 251 inode_lock(newdentry->d_inode);
252 err = ovl_set_attr(newdentry, stat); 252 err = ovl_set_attr(newdentry, stat);
253 mutex_unlock(&newdentry->d_inode->i_mutex); 253 inode_unlock(newdentry->d_inode);
254 if (err) 254 if (err)
255 goto out_cleanup; 255 goto out_cleanup;
256 256
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 692ceda3bc21..ed95272d57a6 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -167,7 +167,7 @@ static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
167 struct dentry *newdentry; 167 struct dentry *newdentry;
168 int err; 168 int err;
169 169
170 mutex_lock_nested(&udir->i_mutex, I_MUTEX_PARENT); 170 inode_lock_nested(udir, I_MUTEX_PARENT);
171 newdentry = lookup_one_len(dentry->d_name.name, upperdir, 171 newdentry = lookup_one_len(dentry->d_name.name, upperdir,
172 dentry->d_name.len); 172 dentry->d_name.len);
173 err = PTR_ERR(newdentry); 173 err = PTR_ERR(newdentry);
@@ -185,7 +185,7 @@ static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
185out_dput: 185out_dput:
186 dput(newdentry); 186 dput(newdentry);
187out_unlock: 187out_unlock:
188 mutex_unlock(&udir->i_mutex); 188 inode_unlock(udir);
189 return err; 189 return err;
190} 190}
191 191
@@ -258,9 +258,9 @@ static struct dentry *ovl_clear_empty(struct dentry *dentry,
258 if (err) 258 if (err)
259 goto out_cleanup; 259 goto out_cleanup;
260 260
261 mutex_lock(&opaquedir->d_inode->i_mutex); 261 inode_lock(opaquedir->d_inode);
262 err = ovl_set_attr(opaquedir, &stat); 262 err = ovl_set_attr(opaquedir, &stat);
263 mutex_unlock(&opaquedir->d_inode->i_mutex); 263 inode_unlock(opaquedir->d_inode);
264 if (err) 264 if (err)
265 goto out_cleanup; 265 goto out_cleanup;
266 266
@@ -599,7 +599,7 @@ static int ovl_remove_upper(struct dentry *dentry, bool is_dir)
599 struct dentry *upper = ovl_dentry_upper(dentry); 599 struct dentry *upper = ovl_dentry_upper(dentry);
600 int err; 600 int err;
601 601
602 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 602 inode_lock_nested(dir, I_MUTEX_PARENT);
603 err = -ESTALE; 603 err = -ESTALE;
604 if (upper->d_parent == upperdir) { 604 if (upper->d_parent == upperdir) {
605 /* Don't let d_delete() think it can reset d_inode */ 605 /* Don't let d_delete() think it can reset d_inode */
@@ -619,7 +619,7 @@ static int ovl_remove_upper(struct dentry *dentry, bool is_dir)
619 * now. 619 * now.
620 */ 620 */
621 d_drop(dentry); 621 d_drop(dentry);
622 mutex_unlock(&dir->i_mutex); 622 inode_unlock(dir);
623 623
624 return err; 624 return err;
625} 625}
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index bf996e574f3d..49e204560655 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -63,9 +63,9 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
63 if (!err) { 63 if (!err) {
64 upperdentry = ovl_dentry_upper(dentry); 64 upperdentry = ovl_dentry_upper(dentry);
65 65
66 mutex_lock(&upperdentry->d_inode->i_mutex); 66 inode_lock(upperdentry->d_inode);
67 err = notify_change(upperdentry, attr, NULL); 67 err = notify_change(upperdentry, attr, NULL);
68 mutex_unlock(&upperdentry->d_inode->i_mutex); 68 inode_unlock(upperdentry->d_inode);
69 } 69 }
70 ovl_drop_write(dentry); 70 ovl_drop_write(dentry);
71out: 71out:
diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index adcb1398c481..fdaf28f75e12 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -228,7 +228,7 @@ static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd)
228 dput(dentry); 228 dput(dentry);
229 } 229 }
230 } 230 }
231 mutex_unlock(&dir->d_inode->i_mutex); 231 inode_unlock(dir->d_inode);
232 } 232 }
233 revert_creds(old_cred); 233 revert_creds(old_cred);
234 put_cred(override_cred); 234 put_cred(override_cred);
@@ -399,7 +399,7 @@ static loff_t ovl_dir_llseek(struct file *file, loff_t offset, int origin)
399 loff_t res; 399 loff_t res;
400 struct ovl_dir_file *od = file->private_data; 400 struct ovl_dir_file *od = file->private_data;
401 401
402 mutex_lock(&file_inode(file)->i_mutex); 402 inode_lock(file_inode(file));
403 if (!file->f_pos) 403 if (!file->f_pos)
404 ovl_dir_reset(file); 404 ovl_dir_reset(file);
405 405
@@ -429,7 +429,7 @@ static loff_t ovl_dir_llseek(struct file *file, loff_t offset, int origin)
429 res = offset; 429 res = offset;
430 } 430 }
431out_unlock: 431out_unlock:
432 mutex_unlock(&file_inode(file)->i_mutex); 432 inode_unlock(file_inode(file));
433 433
434 return res; 434 return res;
435} 435}
@@ -454,10 +454,10 @@ static int ovl_dir_fsync(struct file *file, loff_t start, loff_t end,
454 ovl_path_upper(dentry, &upperpath); 454 ovl_path_upper(dentry, &upperpath);
455 realfile = ovl_path_open(&upperpath, O_RDONLY); 455 realfile = ovl_path_open(&upperpath, O_RDONLY);
456 smp_mb__before_spinlock(); 456 smp_mb__before_spinlock();
457 mutex_lock(&inode->i_mutex); 457 inode_lock(inode);
458 if (!od->upperfile) { 458 if (!od->upperfile) {
459 if (IS_ERR(realfile)) { 459 if (IS_ERR(realfile)) {
460 mutex_unlock(&inode->i_mutex); 460 inode_unlock(inode);
461 return PTR_ERR(realfile); 461 return PTR_ERR(realfile);
462 } 462 }
463 od->upperfile = realfile; 463 od->upperfile = realfile;
@@ -467,7 +467,7 @@ static int ovl_dir_fsync(struct file *file, loff_t start, loff_t end,
467 fput(realfile); 467 fput(realfile);
468 realfile = od->upperfile; 468 realfile = od->upperfile;
469 } 469 }
470 mutex_unlock(&inode->i_mutex); 470 inode_unlock(inode);
471 } 471 }
472 } 472 }
473 473
@@ -479,9 +479,9 @@ static int ovl_dir_release(struct inode *inode, struct file *file)
479 struct ovl_dir_file *od = file->private_data; 479 struct ovl_dir_file *od = file->private_data;
480 480
481 if (od->cache) { 481 if (od->cache) {
482 mutex_lock(&inode->i_mutex); 482 inode_lock(inode);
483 ovl_cache_put(od, file->f_path.dentry); 483 ovl_cache_put(od, file->f_path.dentry);
484 mutex_unlock(&inode->i_mutex); 484 inode_unlock(inode);
485 } 485 }
486 fput(od->realfile); 486 fput(od->realfile);
487 if (od->upperfile) 487 if (od->upperfile)
@@ -557,7 +557,7 @@ void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list)
557{ 557{
558 struct ovl_cache_entry *p; 558 struct ovl_cache_entry *p;
559 559
560 mutex_lock_nested(&upper->d_inode->i_mutex, I_MUTEX_CHILD); 560 inode_lock_nested(upper->d_inode, I_MUTEX_CHILD);
561 list_for_each_entry(p, list, l_node) { 561 list_for_each_entry(p, list, l_node) {
562 struct dentry *dentry; 562 struct dentry *dentry;
563 563
@@ -575,5 +575,5 @@ void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list)
575 ovl_cleanup(upper->d_inode, dentry); 575 ovl_cleanup(upper->d_inode, dentry);
576 dput(dentry); 576 dput(dentry);
577 } 577 }
578 mutex_unlock(&upper->d_inode->i_mutex); 578 inode_unlock(upper->d_inode);
579} 579}
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index d250604f985a..8d826bd56b26 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -229,7 +229,7 @@ void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry)
229{ 229{
230 struct ovl_entry *oe = dentry->d_fsdata; 230 struct ovl_entry *oe = dentry->d_fsdata;
231 231
232 WARN_ON(!mutex_is_locked(&upperdentry->d_parent->d_inode->i_mutex)); 232 WARN_ON(!inode_is_locked(upperdentry->d_parent->d_inode));
233 WARN_ON(oe->__upperdentry); 233 WARN_ON(oe->__upperdentry);
234 BUG_ON(!upperdentry->d_inode); 234 BUG_ON(!upperdentry->d_inode);
235 /* 235 /*
@@ -244,7 +244,7 @@ void ovl_dentry_version_inc(struct dentry *dentry)
244{ 244{
245 struct ovl_entry *oe = dentry->d_fsdata; 245 struct ovl_entry *oe = dentry->d_fsdata;
246 246
247 WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); 247 WARN_ON(!inode_is_locked(dentry->d_inode));
248 oe->version++; 248 oe->version++;
249} 249}
250 250
@@ -252,7 +252,7 @@ u64 ovl_dentry_version_get(struct dentry *dentry)
252{ 252{
253 struct ovl_entry *oe = dentry->d_fsdata; 253 struct ovl_entry *oe = dentry->d_fsdata;
254 254
255 WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); 255 WARN_ON(!inode_is_locked(dentry->d_inode));
256 return oe->version; 256 return oe->version;
257} 257}
258 258
@@ -375,9 +375,9 @@ static inline struct dentry *ovl_lookup_real(struct dentry *dir,
375{ 375{
376 struct dentry *dentry; 376 struct dentry *dentry;
377 377
378 mutex_lock(&dir->d_inode->i_mutex); 378 inode_lock(dir->d_inode);
379 dentry = lookup_one_len(name->name, dir, name->len); 379 dentry = lookup_one_len(name->name, dir, name->len);
380 mutex_unlock(&dir->d_inode->i_mutex); 380 inode_unlock(dir->d_inode);
381 381
382 if (IS_ERR(dentry)) { 382 if (IS_ERR(dentry)) {
383 if (PTR_ERR(dentry) == -ENOENT) 383 if (PTR_ERR(dentry) == -ENOENT)
@@ -744,7 +744,7 @@ static struct dentry *ovl_workdir_create(struct vfsmount *mnt,
744 if (err) 744 if (err)
745 return ERR_PTR(err); 745 return ERR_PTR(err);
746 746
747 mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); 747 inode_lock_nested(dir, I_MUTEX_PARENT);
748retry: 748retry:
749 work = lookup_one_len(OVL_WORKDIR_NAME, dentry, 749 work = lookup_one_len(OVL_WORKDIR_NAME, dentry,
750 strlen(OVL_WORKDIR_NAME)); 750 strlen(OVL_WORKDIR_NAME));
@@ -770,7 +770,7 @@ retry:
770 goto out_dput; 770 goto out_dput;
771 } 771 }
772out_unlock: 772out_unlock:
773 mutex_unlock(&dir->i_mutex); 773 inode_unlock(dir);
774 mnt_drop_write(mnt); 774 mnt_drop_write(mnt);
775 775
776 return work; 776 return work;