- r-o-bind-mounts-kill-open-files-traverse-on-remount-ro.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     r/o bind mounts: kill open files traverse on remount ro
has been removed from the -mm tree.  Its filename was
     r-o-bind-mounts-kill-open-files-traverse-on-remount-ro.patch

This patch was dropped because an updated version will be merged

------------------------------------------------------
Subject: r/o bind mounts: kill open files traverse on remount ro
From: Dave Hansen <hansendc@xxxxxxxxxx>

Now that we have the sb writer count, and all of the writers marked with
mnt_want_write(), we don't need to go looking at all of the individual open
files.

Kill the open files walk, and use the sb writer count.

Signed-off-by: Dave Hansen <haveblue@xxxxxxxxxx>
Cc: Miklos Szeredi <miklos@xxxxxxxxxx>
Cc: Ram Pai <linuxram@xxxxxxxxxx>
Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
Cc: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 fs/file_table.c    |   25 -------------------------
 fs/super.c         |   13 ++++++++++++-
 include/linux/fs.h |    2 --
 3 files changed, 12 insertions(+), 28 deletions(-)

diff -puN fs/file_table.c~r-o-bind-mounts-kill-open-files-traverse-on-remount-ro fs/file_table.c
--- a/fs/file_table.c~r-o-bind-mounts-kill-open-files-traverse-on-remount-ro
+++ a/fs/file_table.c
@@ -306,31 +306,6 @@ void file_kill(struct file *file)
 	}
 }
 
-int fs_may_remount_ro(struct super_block *sb)
-{
-	struct list_head *p;
-
-	/* Check that no files are currently opened for writing. */
-	file_list_lock();
-	list_for_each(p, &sb->s_files) {
-		struct file *file = list_entry(p, struct file, f_u.fu_list);
-		struct inode *inode = file->f_path.dentry->d_inode;
-
-		/* File with pending delete? */
-		if (inode->i_nlink == 0)
-			goto too_bad;
-
-		/* Writeable file? */
-		if (S_ISREG(inode->i_mode) && (file->f_mode & FMODE_WRITE))
-			goto too_bad;
-	}
-	file_list_unlock();
-	return 1; /* Tis' cool bro. */
-too_bad:
-	file_list_unlock();
-	return 0;
-}
-
 void __init files_init(unsigned long mempages)
 { 
 	int n; 
diff -puN fs/super.c~r-o-bind-mounts-kill-open-files-traverse-on-remount-ro fs/super.c
--- a/fs/super.c~r-o-bind-mounts-kill-open-files-traverse-on-remount-ro
+++ a/fs/super.c
@@ -580,7 +580,18 @@ static void mark_files_ro(struct super_b
 
 static int sb_remount_ro(struct super_block *sb)
 {
-	return fs_may_remount_ro(sb);
+	int ret = 0;
+
+	/*
+	 * The r/o flag actually gets set
+	 * by the caller.
+	 */
+	spin_lock(&sb->s_mnt_writers_lock);
+	if (sb->s_writers)
+		ret = -EBUSY;
+	spin_unlock(&sb->s_mnt_writers_lock);
+
+	return ret;
 }
 
 /**
diff -puN include/linux/fs.h~r-o-bind-mounts-kill-open-files-traverse-on-remount-ro include/linux/fs.h
--- a/include/linux/fs.h~r-o-bind-mounts-kill-open-files-traverse-on-remount-ro
+++ a/include/linux/fs.h
@@ -1655,8 +1655,6 @@ extern const struct file_operations read
 extern const struct file_operations write_fifo_fops;
 extern const struct file_operations rdwr_fifo_fops;
 
-extern int fs_may_remount_ro(struct super_block *);
-
 #ifdef CONFIG_BLOCK
 /*
  * return READ, READA, or WRITE
_

Patches currently in -mm which might be from hansendc@xxxxxxxxxx are

r-o-bind-mounts-kill-open-files-traverse-on-remount-ro.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux