rpms/kernel/FC-6 linux-2.6-raid-autorun.patch, NONE, 1.1 kernel-2.6.spec, 1.2920, 1.2921

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Tue Feb 20 22:50:20 UTC 2007


Author: davej

Update of /cvs/dist/rpms/kernel/FC-6
In directory cvs.devel.redhat.com:/tmp/cvs-serv25038

Modified Files:
	kernel-2.6.spec 
Added Files:
	linux-2.6-raid-autorun.patch 
Log Message:
* Tue Feb 20 2007 Dave Jones <davej at redhat.com>
- restore START_ARRAY ioctl.


linux-2.6-raid-autorun.patch:
 drivers/md/md.c              |   82 +++++++++++++++++++++++++++++++++++++++++++
 include/linux/compat_ioctl.h |    1 
 include/linux/raid/md_u.h    |    2 -
 3 files changed, 84 insertions(+), 1 deletion(-)

--- NEW FILE linux-2.6-raid-autorun.patch ---
--- vanilla/include/linux/raid/md_u.h.md	2006-11-29 16:57:37.000000000 -0500
+++ vanilla/include/linux/raid/md_u.h	2007-01-23 16:12:28.000000000 -0500
@@ -41,7 +41,7 @@
 
 /* usage */
 #define RUN_ARRAY		_IOW (MD_MAJOR, 0x30, mdu_param_t)
-/*  0x31 was START_ARRAY  */
+#define START_ARRAY		_IO (MD_MAJOR, 0x31)
 #define STOP_ARRAY		_IO (MD_MAJOR, 0x32)
 #define STOP_ARRAY_RO		_IO (MD_MAJOR, 0x33)
 #define RESTART_ARRAY_RW	_IO (MD_MAJOR, 0x34)
--- vanilla/include/linux/compat_ioctl.h.md	2006-11-29 16:57:37.000000000 -0500
+++ vanilla/include/linux/compat_ioctl.h	2007-01-23 16:12:28.000000000 -0500
@@ -128,6 +128,7 @@
 ULONG_IOCTL(HOT_ADD_DISK)
 ULONG_IOCTL(SET_DISK_FAULTY)
 COMPATIBLE_IOCTL(RUN_ARRAY)
+ULONG_IOCTL(START_ARRAY)
 COMPATIBLE_IOCTL(STOP_ARRAY)
 COMPATIBLE_IOCTL(STOP_ARRAY_RO)
 COMPATIBLE_IOCTL(RESTART_ARRAY_RW)
--- vanilla/drivers/md/md.c.md	2006-11-29 16:57:37.000000000 -0500
+++ vanilla/drivers/md/md.c	2007-01-23 16:12:28.000000000 -0500
@@ -3486,6 +3486,67 @@
 	printk(KERN_INFO "md: ... autorun DONE.\n");
 }
 
+/*
+ * import RAID devices based on one partition
+ * if possible, the array gets run as well.
+ */
+
+static int autostart_array(dev_t startdev)
+{
+	char b[BDEVNAME_SIZE];
+	int err = -EINVAL, i;
+	mdp_super_t *sb = NULL;
+	mdk_rdev_t *start_rdev = NULL, *rdev;
+
+	start_rdev = md_import_device(startdev, 0, 0);
+	if (IS_ERR(start_rdev))
+		return err;
+
+
+	/* NOTE: this can only work for 0.90.0 superblocks */
+	sb = (mdp_super_t*)page_address(start_rdev->sb_page);
+	if (sb->major_version != 0 ||
+	    sb->minor_version != 90 ) {
+		printk(KERN_WARNING "md: can only autostart 0.90.0 arrays\n");
+		export_rdev(start_rdev);
+		return err;
+	}
+
+	if (test_bit(Faulty, &start_rdev->flags)) {
+		printk(KERN_WARNING 
+			"md: can not autostart based on faulty %s!\n",
+			bdevname(start_rdev->bdev,b));
+		export_rdev(start_rdev);
+		return err;
+	}
+	list_add(&start_rdev->same_set, &pending_raid_disks);
+
+	for (i = 0; i < MD_SB_DISKS; i++) {
+		mdp_disk_t *desc = sb->disks + i;
+		dev_t dev = MKDEV(desc->major, desc->minor);
+
+		if (!dev)
+			continue;
+		if (dev == startdev)
+			continue;
+		if (MAJOR(dev) != desc->major || MINOR(dev) != desc->minor)
+			continue;
+		rdev = md_import_device(dev, 0, 0);
+		if (IS_ERR(rdev))
+			continue;
+
+		list_add(&rdev->same_set, &pending_raid_disks);
+	}
+
+	/*
+	 * possibly return codes
+	 */
+	autorun_devices(0);
+	return 0;
+
+}
+
+
 static int get_version(void __user * arg)
 {
 	mdu_version_t ver;
@@ -4243,6 +4304,27 @@
 		goto abort;
 	}
 
+
+	if (cmd == START_ARRAY) {
+		/* START_ARRAY doesn't need to lock the array as autostart_array
+		 * does the locking, and it could even be a different array
+		 */
+		static int cnt = 3;
+		if (cnt > 0 ) {
+			printk(KERN_WARNING
+			       "md: %s(pid %d) used deprecated START_ARRAY ioctl. "
+			       "This will not be supported beyond July 2006\n",
+			       current->comm, current->pid);
+			cnt--;
+		}
+		err = autostart_array(new_decode_dev(arg));
+		if (err) {
+			printk(KERN_WARNING "md: autostart failed!\n");
+			goto abort;
+		}
+		goto done;
+	}
+
 	err = mddev_lock(mddev);
 	if (err) {
 		printk(KERN_INFO 


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-6/kernel-2.6.spec,v
retrieving revision 1.2920
retrieving revision 1.2921
diff -u -r1.2920 -r1.2921
--- kernel-2.6.spec	20 Feb 2007 18:51:19 -0000	1.2920
+++ kernel-2.6.spec	20 Feb 2007 22:50:18 -0000	1.2921
@@ -444,6 +444,7 @@
 Patch1770: linux-2.6-optimise-spinlock-debug.patch
 Patch1771: linux-2.6-silence-noise.patch
 Patch1780: linux-2.6-drivers-add-qlogic-firmware.patch
+Patch1790: linux-2.6-raid-autorun.patch
 
 # 2.6.20 fixes for testing
 Patch1787: linux-2.6-net_bcm43xx_1GB_DMA_fix.patch
@@ -1101,6 +1102,8 @@
 %patch1771 -p1
 # qlogic firmware
 %patch1780 -p1
+# restore START_ARRAY ioctl
+%patch1790 -p1
 
 # 2.6.20 fixes
 %patch1787 -p1
@@ -2088,6 +2091,9 @@
 %endif
 
 %changelog
+* Tue Feb 20 2007 Dave Jones <davej at redhat.com>
+- restore START_ARRAY ioctl.
+
 * Tue Feb 20 2007 Chuck Ebbert <cebbert at redhat.com>
 - Rebase to upstream kernel 2.6.20 (davej)
 - Add patch 2.6.20.1 (CVE-2007-0772)




More information about the fedora-cvs-commits mailing list