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