Linus,
 A couple of versions of this patch went into Alan's tree, but weren't
 quite right.  This one is minimal, but works.

 The problem is that the the tidy up of xor.o, it auto-initialises
 itself, instead of being called by raid.o, and so needs to be linked
 *before* md.o, as the initialiser for md.o may start up a raid5
 device that needs xor.

 This patch simply puts xor before md.  I would like to tidy this up
 further and have all the raid flavours auto-initialise, but there are
 issues that I have to clarify with the kbuild people before I do
 that.

 After compiling with this patch, 
   % objdump -t vmlinux | grep initcall.init                
 contains:
c03345dc l     O .initcall.init 00000004 __initcall_calibrate_xor_block
c03345e0 l     O .initcall.init 00000004 __initcall_md_init
c03345e4 l     O .initcall.init 00000004 __initcall_md_run_setup

 in that order which convinces me that it gets the order right.

NeilBrown

--- ./drivers/md/Makefile       2000/11/29 03:46:13     1.1
+++ ./drivers/md/Makefile       2000/11/29 04:05:27     1.2
@@ -16,12 +16,16 @@
 obj-n          :=
 obj-           :=
 
-obj-$(CONFIG_BLK_DEV_MD)       += md.o
+# 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.
 obj-$(CONFIG_MD_LINEAR)                += linear.o
 obj-$(CONFIG_MD_RAID0)         += raid0.o
 obj-$(CONFIG_MD_RAID1)         += raid1.o
 obj-$(CONFIG_MD_RAID5)         += raid5.o xor.o
+obj-$(CONFIG_BLK_DEV_MD)       += md.o
 obj-$(CONFIG_BLK_DEV_LVM)      += lvm-mod.o
 
 # Translate to Rules.make lists.
 O_OBJS         := $(filter-out $(export-objs), $(obj-y))
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]

Reply via email to