diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2011-11-21 12:11:31 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-07 05:20:12 +0100 |
commit | 4ed5e82fe77f4147cf386327c9a63a2dd7eff518 (patch) | |
tree | f4eaeefaf5d293014457892ac31f878eece07331 /fs/inode.c | |
parent | vfs: keep list of mounts for each superblock (diff) | |
download | linux-4ed5e82fe77f4147cf386327c9a63a2dd7eff518.tar.xz linux-4ed5e82fe77f4147cf386327c9a63a2dd7eff518.zip |
vfs: protect remounting superblock read-only
Currently remouting superblock read-only is racy in a major way.
With the per mount read-only infrastructure it is now possible to
prevent most races, which this patch attempts.
Before starting the remount read-only, iterate through all mounts
belonging to the superblock and if none of them have any pending
writes, set sb->s_readonly_remount. This indicates that remount is in
progress and no further write requests are allowed. If the remount
succeeds set MS_RDONLY and reset s_readonly_remount.
If the remounting is unsuccessful just reset s_readonly_remount.
This can result in transient EROFS errors, despite the fact the
remount failed. Unfortunately hodling off writes is difficult as
remount itself may touch the filesystem (e.g. through load_nls())
which would deadlock.
A later patch deals with delayed writes due to nlink going to zero.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Tested-by: Toshiyuki Okajima <toshi.okajima@jp.fujitsu.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/inode.c')
0 files changed, 0 insertions, 0 deletions