init: split get_fs_names
authorChristoph Hellwig <hch@lst.de>
Wed, 14 Jul 2021 20:23:19 +0000 (16:23 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 23 Aug 2021 05:25:40 +0000 (01:25 -0400)
Split get_fs_names into one function that splits up the command line
argument, and one that gets the list of all registered file systems.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
init/do_mounts.c

index 74aede8..ec32de3 100644 (file)
@@ -338,30 +338,31 @@ __setup("rootflags=", root_data_setup);
 __setup("rootfstype=", fs_names_setup);
 __setup("rootdelay=", root_delay_setup);
 
-static void __init get_fs_names(char *page)
+static void __init split_fs_names(char *page, char *names)
 {
-       char *s = page;
-
-       if (root_fs_names) {
-               strcpy(page, root_fs_names);
-               while (*s++) {
-                       if (s[-1] == ',')
-                               s[-1] = '\0';
-               }
-       } else {
-               int len = get_filesystem_list(page);
-               char *p, *next;
+       strcpy(page, root_fs_names);
+       while (*page++) {
+               if (page[-1] == ',')
+                       page[-1] = '\0';
+       }
+       *page = '\0';
+}
 
-               page[len] = '\0';
-               for (p = page-1; p; p = next) {
-                       next = strchr(++p, '\n');
-                       if (*p++ != '\t')
-                               continue;
-                       while ((*s++ = *p++) != '\n')
-                               ;
-                       s[-1] = '\0';
-               }
+static void __init get_all_fs_names(char *page)
+{
+       int len = get_filesystem_list(page);
+       char *s = page, *p, *next;
+
+       page[len] = '\0';
+       for (p = page - 1; p; p = next) {
+               next = strchr(++p, '\n');
+               if (*p++ != '\t')
+                       continue;
+               while ((*s++ = *p++) != '\n')
+                       ;
+               s[-1] = '\0';
        }
+
        *s = '\0';
 }
 
@@ -411,7 +412,10 @@ void __init mount_block_root(char *name, int flags)
 
        scnprintf(b, BDEVNAME_SIZE, "unknown-block(%u,%u)",
                  MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
-       get_fs_names(fs_names);
+       if (root_fs_names)
+               split_fs_names(fs_names, root_fs_names);
+       else
+               get_all_fs_names(fs_names);
 retry:
        for (p = fs_names; *p; p += strlen(p)+1) {
                int err = do_mount_root(name, p, flags, root_mount_data);