aboutsummaryrefslogtreecommitdiffstats
path: root/fs/file_table.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-07-16 12:01:42 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-07-16 12:01:42 -0400
commit8626e4a42675ff9903f7d4fbf14d8ebc11b5926c (patch)
treec631dfe2854cb1382a5d8f5aa11b071762ddf27d /fs/file_table.c
parenta8d8f02cf0c379693762107afe812b9e52090e39 (diff)
parent9249e17fe094d853d1ef7475dd559a2cc7e23d42 (diff)
Merge commit '9249e17fe094d853d1ef7475dd559a2cc7e23d42' into nfs-for-3.6
Resolve conflicts with the VFS atomic open and sget changes. Conflicts: fs/nfs/nfs4proc.c
Diffstat (limited to 'fs/file_table.c')
-rw-r--r--fs/file_table.c9
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
486retry:
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}