• Miklos Szeredi's avatar
    vfs: protect remounting superblock read-only · 4ed5e82f
    Miklos Szeredi authored
    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: default avatarMiklos Szeredi <mszeredi@suse.cz>
    Tested-by: default avatarToshiyuki Okajima <toshi.okajima@jp.fujitsu.com>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    4ed5e82f
super.c 29.3 KB