[3498] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

devfs patch for md.c

daemon@ATHENA.MIT.EDU (Mr LEROY christophe)
Mon Mar 9 08:10:59 1998

From: Mr LEROY christophe <leroy@meg.fr>
Date: 	Mon 09 Mar 13:54:14 1998 (MET)
To: rgooch@atnf.csiro.au
Cc: linux-scsi@vger.rutgers.edu, zyngier@ufr-info-p7.ibp.fr

Actually, /dev/md/* are created in do_md_add() funtion.
The problem is that /dev/md/* has to exist in order to run command
  mdadd /dev/md/0 /dev/some_disk /dev/another_disk

Here is a patch on drivers/block/md.c to create /dev/md/* during md
initialisation instead of inside do_md_add()

christophe leroy

diff -u md.c.org md.c
--- md.c.org    Sun Mar  8 11:51:52 1998
+++ md.c        Sun Mar  8 11:53:53 1998
@@ -556,12 +556,6 @@
        int i;
        int hot_add=0;
        struct real_dev *realdev;
-#ifdef CONFIG_DEVFS_FS
-       char name[16];
-#  ifndef CONFIG_DEVFS_DISABLE_OLD_NAMES
-       char symlink[16];
-#  endif
-#endif
 
        if (md_dev[minor].nb_dev==MAX_REAL)
                return -EINVAL;
@@ -628,17 +622,6 @@
                }
        } else
                md_dev[minor].nb_dev++;
-#ifdef CONFIG_DEVFS_FS
-       sprintf (name, "md/%d", minor);
-       devfs_register (name, 0, DEVFS_FL_TOLERANT,
-                       MAJOR_NR, minor,
-                       S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0,
-                       &md_fops, NULL);
-#  ifndef CONFIG_DEVFS_DISABLE_OLD_NAMES
-       sprintf (symlink, "md%d", minor);
-       devfs_mk_symlink (NULL, symlink, 0, DEVFS_FL_TOLERANT, name, 0, NULL);
-#  endif
-#endif
        printk ("REGISTER_DEV %s to md%x done\n", partition_name(dev), minor);
        return (0);
 }
@@ -1305,6 +1288,12 @@
 __initfunc(int md_init (void))
 {
   int i;
+#ifdef CONFIG_DEVFS_FS
+  char name[16];
+#  ifndef CONFIG_DEVFS_DISABLE_OLD_NAMES
+  char symlink[16];
+#  endif
+#endif
 
   printk ("md driver %d.%d.%d MAX_MD_DEV=%d, MAX_REAL=%d\n",
     MD_MAJOR_VERSION, MD_MINOR_VERSION, MD_PATCHLEVEL_VERSION,
@@ -1328,6 +1317,20 @@
     md_threads[i].flags = 0;
     kernel_thread (md_thread, md_threads + i, 0);
   }
+
+#ifdef CONFIG_DEVFS_FS
+  for (i = 0; i< MAX_MD_DEV;i++) {
+       sprintf (name, "md/%d", i);
+       devfs_register (name, 0, DEVFS_FL_TOLERANT,
+                       MAJOR_NR, i,
+                       S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0,
+                       &md_fops, NULL);
+#  ifndef CONFIG_DEVFS_DISABLE_OLD_NAMES
+       sprintf (symlink, "md%d", i);
+       devfs_mk_symlink (NULL, symlink, 0, DEVFS_FL_TOLERANT, name, 0, NULL);
+#  endif
+  }
+#endif
 
   blk_dev[MD_MAJOR].request_fn=DEVICE_REQUEST;
   blk_dev[MD_MAJOR].current_request=NULL;


-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu

home help back first fref pref prev next nref lref last post