diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-22 15:40:57 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-22 18:04:28 -0500 |
commit | 5955102c9984fa081b2d570cfac75c97eecf8f3b (patch) | |
tree | a4744386eac4b916e847eb4eedfada158f6527b4 /fs/overlayfs | |
parent | 57b8f112cfe6622ddddb8c2641206bb5fa8a112d (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.c | 4 | ||||
-rw-r--r-- | fs/overlayfs/dir.c | 12 | ||||
-rw-r--r-- | fs/overlayfs/inode.c | 4 | ||||
-rw-r--r-- | fs/overlayfs/readdir.c | 20 | ||||
-rw-r--r-- | fs/overlayfs/super.c | 14 |
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, | |||
185 | out_dput: | 185 | out_dput: |
186 | dput(newdentry); | 186 | dput(newdentry); |
187 | out_unlock: | 187 | out_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); |
71 | out: | 71 | out: |
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 | } |
431 | out_unlock: | 431 | out_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); |
748 | retry: | 748 | retry: |
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 | } |
772 | out_unlock: | 772 | out_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; |