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:
@@ -395,8 +395,6 @@ retry:
|
|||||||
case 0:
|
case 0:
|
||||||
goto out;
|
goto out;
|
||||||
case -EACCES:
|
case -EACCES:
|
||||||
flags |= MS_RDONLY;
|
|
||||||
goto retry;
|
|
||||||
case -EINVAL:
|
case -EINVAL:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -419,6 +417,10 @@ retry:
|
|||||||
#endif
|
#endif
|
||||||
panic("VFS: Unable to mount root fs on %s", b);
|
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("List of all partitions:\n");
|
||||||
printk_all_partitions();
|
printk_all_partitions();
|
||||||
|
Reference in New Issue
Block a user