rpms/dmraid/devel dmraid-1.0.0.rc15-isw-serial.patch, NONE, 1.1 dmraid.spec, 1.93, 1.94

Hans de Goede jwrdegoede at fedoraproject.org
Fri Apr 17 09:33:36 UTC 2009


Author: jwrdegoede

Update of /cvs/extras/rpms/dmraid/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv4509

Modified Files:
	dmraid.spec 
Added Files:
	dmraid-1.0.0.rc15-isw-serial.patch 
Log Message:
* Fri Apr 17 2009 Hans de Goede <hdegoede at redhat.com> - 1.0.0.rc15-7
- Fix activation of isw raid sets when the disks have serialnumber longer
  then 16 characters (#490121)


dmraid-1.0.0.rc15-isw-serial.patch:

--- NEW FILE dmraid-1.0.0.rc15-isw-serial.patch ---
diff -up 1.0.0.rc15/lib/format/ataraid/isw.c~ 1.0.0.rc15/lib/format/ataraid/isw.c
--- 1.0.0.rc15/lib/format/ataraid/isw.c~	2009-04-10 14:12:14.000000000 +0200
+++ 1.0.0.rc15/lib/format/ataraid/isw.c	2009-04-10 14:38:56.000000000 +0200
@@ -81,15 +81,43 @@ is_raid10(struct isw_dev *dev)
 }
 
 /* Find a disk table slot by serial number. */
+static const char *dev_info_serial_to_isw(const char *di_serial)
+{
+	static char isw_serial[1024];
+
+	int i, isw_serial_len = 0;
+
+	for (i = 0; di_serial[i] && isw_serial_len < 1023; i++) {
+		if (((unsigned char)di_serial[i]) > 0x20) {
+			/* ':' is reserved for use in placeholder serial
+			 * numbers for missing disks */
+			if (di_serial[i] == ':')
+				isw_serial[isw_serial_len] = ';';
+			else
+				isw_serial[isw_serial_len] = di_serial[i];
+			isw_serial_len++;
+		}
+	}
+	isw_serial[isw_serial_len] = 0;
+
+	if (isw_serial_len > MAX_RAID_SERIAL_LEN)
+		memmove(isw_serial,
+			isw_serial + (isw_serial_len - MAX_RAID_SERIAL_LEN),
+			MAX_RAID_SERIAL_LEN);
+
+	return isw_serial;
+}
+
 static struct isw_disk *
 _get_disk(struct isw *isw, struct dev_info *di)
 {
 	if (di->serial) {
 		int i = isw->num_disks;
 		struct isw_disk *disk = isw->disk;
+		const char *isw_serial = dev_info_serial_to_isw(di->serial);
 
 		while (i--) {
-			if (!strncmp(di->serial, (const char *) disk[i].serial,
+			if (!strncmp(isw_serial, (const char *) disk[i].serial,
 				     MAX_RAID_SERIAL_LEN))
 				return disk + i;
 		}
@@ -866,7 +894,8 @@ rd_by_serial(struct raid_set *rs, const 
 
 	list_for_each_entry(rd, &rs->devs, devs) {
 		if (rd->di &&
-		    !strncmp(rd->di->serial, serial, MAX_RAID_SERIAL_LEN))
+		    !strncmp(dev_info_serial_to_isw(rd->di->serial), serial,
+						    MAX_RAID_SERIAL_LEN))
 			return rd;
 	}
 
@@ -1297,7 +1326,8 @@ isw_config_disks(struct lib_context *lc,
 	struct raid_dev *rd;
 
 	list_for_each_entry(rd, &rs->devs, devs) {
-		strncpy((char *) disk[i].serial, rd->di->serial,
+		strncpy((char *) disk[i].serial, 
+			dev_info_serial_to_isw(rd->di->serial),
 			MAX_RAID_SERIAL_LEN);
 		disk[i].totalBlocks = rd->di->sectors;
 
@@ -2421,7 +2451,8 @@ update_metadata(struct lib_context *lc, 
 	while (i--) {
 		/* Check if the disk is listed. */
 		list_for_each_entry(di, LC_DI(lc), list) {
-			if (!strncmp(di->serial, (const char *) disk[i].serial,
+			if (!strncmp(dev_info_serial_to_isw(di->serial),
+				     (const char *) disk[i].serial,
 				     MAX_RAID_SERIAL_LEN))
 				goto goon;
 		}
@@ -2517,7 +2548,8 @@ update_metadata(struct lib_context *lc, 
 	new_disk->status = CONFIG_ON_DISK |
 		DISK_SMART_EVENT_SUPPORTED |
 		CLAIMED_DISK | DETECTED_DISK | USABLE_DISK | CONFIGURED_DISK;
-	strncpy((char *) new_disk->serial, di->serial, MAX_RAID_SERIAL_LEN);
+	strncpy((char *) new_disk->serial, dev_info_serial_to_isw(di->serial),
+		MAX_RAID_SERIAL_LEN);
 
 	/* build new isw_disk array */
 	for (i = 0; i < isw->num_disks; i++) {


Index: dmraid.spec
===================================================================
RCS file: /cvs/extras/rpms/dmraid/devel/dmraid.spec,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -r1.93 -r1.94
--- dmraid.spec	24 Feb 2009 12:09:26 -0000	1.93
+++ dmraid.spec	17 Apr 2009 09:33:05 -0000	1.94
@@ -1,13 +1,14 @@
 Summary: Device-mapper RAID tool and library
 Name: dmraid
 Version: 1.0.0.rc15
-Release: 6%{?dist}
+Release: 7%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 URL: http://people.redhat.com/heinzm/sw/dmraid
 Patch0: dmraid-1.0.0.rc15-whitespace.patch
 Patch1: dmraid-1.0.0.rc15-isw-raid10.patch
 Patch2: dmraid-1.0.0.rc15-rm_partitions.patch
+Patch3: dmraid-1.0.0.rc15-isw-serial.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: device-mapper-devel, libselinux-devel, libsepol-devel
 Requires: kpartx
@@ -46,6 +47,7 @@
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
 
 %build
 %configure --prefix=${RPM_BUILD_ROOT}/usr --sbindir=${RPM_BUILD_ROOT}/sbin --libdir=${RPM_BUILD_ROOT}/%{_libdir} --mandir=${RPM_BUILD_ROOT}/%{_mandir} --includedir=${RPM_BUILD_ROOT}/%{_includedir} --enable-debug --enable-libselinux --enable-libsepol --disable-static_link
@@ -91,6 +93,10 @@
 %attr(755,root,root) %{_libdir}/libdmraid.so.*
 
 %changelog
+* Fri Apr 17 2009 Hans de Goede <hdegoede at redhat.com> - 1.0.0.rc15-7
+- Fix activation of isw raid sets when the disks have serialnumber longer
+  then 16 characters (#490121)
+
 * Tue Feb 24 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.0.0.rc15-6
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
 




More information about the fedora-extras-commits mailing list