Skip to contentSkip to conversation

init: fix read-write root mount

PATCH Superseded Miklos Szeredi 1 participant 1 message Nov 20, 2014 VFS

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 init: fix read-write root mount

From: Miklos Szeredi <[email protected]>

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.

---
 init/do_mounts.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
init/do_mounts.c +4 -2
@@ -395,8 +395,6 @@ void __init mount_block_root(char *name,
 			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,
 #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();