diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-06-23 14:41:54 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-07-14 08:35:46 -0400 |
| commit | 85d7d618c17a09cfd824c1ad4483c19e6f9637ff (patch) | |
| tree | 40ec525ab50573094a1ab402877aac9e4e6053fa | |
| parent | c4107b3097465e25f7d6a9b0ac0518b07b24e774 (diff) | |
mark_files_ro(): don't bother with mntget/mntput
mnt_drop_write_file() is safe under any lock
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/file_table.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/fs/file_table.c b/fs/file_table.c index a305d9e2d1b2..9ace2781931e 100644 --- a/fs/file_table.c +++ b/fs/file_table.c | |||
| @@ -483,10 +483,8 @@ void mark_files_ro(struct super_block *sb) | |||
| 483 | { | 483 | { |
| 484 | struct file *f; | 484 | struct file *f; |
| 485 | 485 | ||
| 486 | retry: | ||
| 487 | lg_global_lock(&files_lglock); | 486 | lg_global_lock(&files_lglock); |
| 488 | do_file_list_for_each_entry(sb, f) { | 487 | do_file_list_for_each_entry(sb, f) { |
| 489 | struct vfsmount *mnt; | ||
| 490 | if (!S_ISREG(f->f_path.dentry->d_inode->i_mode)) | 488 | if (!S_ISREG(f->f_path.dentry->d_inode->i_mode)) |
| 491 | continue; | 489 | continue; |
| 492 | if (!file_count(f)) | 490 | if (!file_count(f)) |
| @@ -499,12 +497,7 @@ retry: | |||
| 499 | if (file_check_writeable(f) != 0) | 497 | if (file_check_writeable(f) != 0) |
| 500 | continue; | 498 | continue; |
| 501 | file_release_write(f); | 499 | file_release_write(f); |
| 502 | mnt = mntget(f->f_path.mnt); | 500 | mnt_drop_write_file(f); |
| 503 | /* This can sleep, so we can't hold the spinlock. */ | ||
| 504 | lg_global_unlock(&files_lglock); | ||
| 505 | mnt_drop_write(mnt); | ||
| 506 | mntput(mnt); | ||
| 507 | goto retry; | ||
| 508 | } while_file_list_for_each_entry; | 501 | } while_file_list_for_each_entry; |
| 509 | lg_global_unlock(&files_lglock); | 502 | lg_global_unlock(&files_lglock); |
| 510 | } | 503 | } |
