init: fix read-write root mount
If mount flags don't have MS_RDONLY, iso9660 returns EACCES without actually checking if it's an iso image. This tricks mount_block_root() into retrying with MS_RDONLY. This results in a read-only root despite the "rw" boot parameter if the actual filesystem was checked after iso9660. I believe the behavior of iso9660 is okay, while that of mount_block_root() is not. It should rather try all types without MS_RDONLY and only then retry with MS_RDONLY. This change also makes the code more robust against the case when EACCES is returned despite MS_RDONLY, which would've resulted in a lockup. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7d65cf10e3
commit
10975933da
|
@ -395,8 +395,6 @@ void __init mount_block_root(char *name, int flags)
|
|||
case 0:
|
||||
goto out;
|
||||
case -EACCES:
|
||||
flags |= MS_RDONLY;
|
||||
goto retry;
|
||||
case -EINVAL:
|
||||
continue;
|
||||
}
|
||||
|
@ -419,6 +417,10 @@ void __init mount_block_root(char *name, int flags)
|
|||
#endif
|
||||
panic("VFS: Unable to mount root fs on %s", b);
|
||||
}
|
||||
if (!(flags & MS_RDONLY)) {
|
||||
flags |= MS_RDONLY;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
printk("List of all partitions:\n");
|
||||
printk_all_partitions();
|
||||
|
|
Loading…
Reference in New Issue