Linus,
 here is a patch for test12 which cleans up the initialisation of raid
 personalities.  I didn't include it in the previous raid init cleanup
 because I hadn't figured out the inner mysteries of link order
 completely.  The linux-kbuild list helped there.

 This patch arranges that each personaility auto-initialised, and
 makes sure that all personaility are initialised before md.o gets
 initialised. 

 An earlier form of this (which didn't get the Makefile quite right)
 went into test11ac??.

NeilBrown


--- ./drivers/md/Makefile       2000/11/29 05:46:23     1.3
+++ ./drivers/md/Makefile       2000/11/29 06:04:25     1.4
@@ -16,10 +16,13 @@
 obj-n          :=
 obj-           :=
 
-# NOTE: xor.o must link *before* md.o so that auto-detect
-# of raid5 arrays works (and doesn't Oops).  Fortunately
-# they are both export-objs, so setting the order here
-# works.
+# Note: link order is important.  All raid personalities
+# and xor.o must come before md.o, as they each initialise 
+# themselves, and md.o may use the personalities when it 
+# auto-initialised.
+# The use of MIX_OBJS allows link order to be maintained even
+# though some are export-objs and some aren't.
+
 obj-$(CONFIG_MD_LINEAR)                += linear.o
 obj-$(CONFIG_MD_RAID0)         += raid0.o
 obj-$(CONFIG_MD_RAID1)         += raid1.o
@@ -28,10 +31,11 @@
 obj-$(CONFIG_BLK_DEV_LVM)      += lvm-mod.o
 
 # Translate to Rules.make lists.
-O_OBJS         := $(filter-out $(export-objs), $(obj-y))
-OX_OBJS                := $(filter     $(export-objs), $(obj-y))
-M_OBJS         := $(sort $(filter-out $(export-objs), $(obj-m)))
-MX_OBJS                := $(sort $(filter      $(export-objs), $(obj-m)))
+active-objs    := $(sort $(obj-y) $(obj-m))
+
+O_OBJS         := $(obj-y)
+M_OBJS         := $(obj-m)
+MIX_OBJS       := $(filter $(export-objs), $(active-objs))
 
 include $(TOPDIR)/Rules.make
 
--- ./drivers/md/md.c   2000/11/29 04:55:47     1.4
+++ ./drivers/md/md.c   2000/11/29 06:04:25     1.5
@@ -3576,12 +3576,6 @@
        create_proc_read_entry("mdstat", 0, NULL, md_status_read_proc, NULL);
 #endif
 }
-void hsm_init (void);
-void translucent_init (void);
-void linear_init (void);
-void raid0_init (void);
-void raid1_init (void);
-void raid5_init (void);
 
 int md__init md_init (void)
 {
@@ -3617,18 +3611,6 @@
        md_register_reboot_notifier(&md_notifier);
        raid_table_header = register_sysctl_table(raid_root_table, 1);
 
-#ifdef CONFIG_MD_LINEAR
-       linear_init ();
-#endif
-#ifdef CONFIG_MD_RAID0
-       raid0_init ();
-#endif
-#ifdef CONFIG_MD_RAID1
-       raid1_init ();
-#endif
-#ifdef CONFIG_MD_RAID5
-       raid5_init ();
-#endif
        md_geninit();
        return (0);
 }
--- ./drivers/md/raid5.c        2000/11/29 04:16:29     1.2
+++ ./drivers/md/raid5.c        2000/11/29 06:04:25     1.3
@@ -2352,19 +2352,16 @@
        sync_request:   raid5_sync_request
 };
 
-int raid5_init (void)
+static int md__init raid5_init (void)
 {
        return register_md_personality (RAID5, &raid5_personality);
 }
 
-#ifdef MODULE
-int init_module (void)
-{
-       return raid5_init();
-}
-
-void cleanup_module (void)
+static void raid5_exit (void)
 {
        unregister_md_personality (RAID5);
 }
-#endif
+
+module_init(raid5_init);
+module_exit(raid5_exit);
+
--- ./drivers/md/linear.c       2000/11/29 05:45:04     1.1
+++ ./drivers/md/linear.c       2000/11/29 06:04:25     1.2
@@ -190,24 +190,16 @@
        status:         linear_status,
 };
 
-#ifndef MODULE
-
-void md__init linear_init (void)
-{
-       register_md_personality (LINEAR, &linear_personality);
-}
-
-#else
-
-int init_module (void)
+static int md__init linear_init (void)
 {
-       return (register_md_personality (LINEAR, &linear_personality));
+       return register_md_personality (LINEAR, &linear_personality);
 }
 
-void cleanup_module (void)
+static void linear_exit (void)
 {
        unregister_md_personality (LINEAR);
 }
 
-#endif
 
+module_init(linear_init);
+module_exit(linear_exit);
--- ./drivers/md/raid0.c        2000/11/29 05:45:04     1.1
+++ ./drivers/md/raid0.c        2000/11/29 06:04:25     1.2
@@ -333,24 +333,17 @@
        status:         raid0_status,
 };
 
-#ifndef MODULE
-
-void raid0_init (void)
-{
-       register_md_personality (RAID0, &raid0_personality);
-}
-
-#else
-
-int init_module (void)
+static int md__init raid0_init (void)
 {
-       return (register_md_personality (RAID0, &raid0_personality));
+       return register_md_personality (RAID0, &raid0_personality);
 }
 
-void cleanup_module (void)
+static void raid0_exit (void)
 {
        unregister_md_personality (RAID0);
 }
 
-#endif
+module_init(raid0_init);
+module_exit(raid0_exit);
+
 
--- ./drivers/md/raid1.c        2000/11/29 05:45:04     1.1
+++ ./drivers/md/raid1.c        2000/11/29 06:04:25     1.2
@@ -1882,19 +1882,16 @@
        sync_request:   raid1_sync_request
 };
 
-int raid1_init (void)
+static int md__init raid1_init (void)
 {
        return register_md_personality (RAID1, &raid1_personality);
 }
 
-#ifdef MODULE
-int init_module (void)
-{
-       return raid1_init();
-}
-
-void cleanup_module (void)
+static void raid1_exit (void)
 {
        unregister_md_personality (RAID1);
 }
-#endif
+
+module_init(raid1_init);
+module_exit(raid1_exit);
+
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]

Reply via email to