[dm-devel] dmraid/lib/format/ataraid sil.c

heinzm at sourceware.org heinzm at sourceware.org
Tue Dec 1 13:26:04 UTC 2009


CVSROOT:	/cvs/dm
Module name:	dmraid
Changes by:	heinzm at sourceware.org	2009-12-01 13:26:04

Modified files:
	lib/format/ataraid: sil.c 

Log message:
	Fix Silicon Image metadata format handler JBOD support

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/dmraid/lib/format/ataraid/sil.c.diff?cvsroot=dm&r1=1.4&r2=1.5

--- dmraid/lib/format/ataraid/sil.c	2009/09/16 11:45:14	1.4
+++ dmraid/lib/format/ataraid/sil.c	2009/12/01 13:26:04	1.5
@@ -1,8 +1,8 @@
 /*
  * Silicon Image Medley ATARAID metadata format handler.
  *
- * Copyright (C) 2004,2005  Heinz Mauelshagen, Red Hat GmbH.
- *                          All rights reserved.
+ * Copyright (C) 2004,2005,2009  Heinz Mauelshagen, Red Hat GmbH.
+ *				 All rights reserved.
  *
  * See file LICENSE at the top of this source tree for license information.
  */
@@ -166,6 +166,16 @@
 	return 1;
 }
 
+/* Return number of array sectors. */
+static uint64_t
+array_size(struct raid_dev *rd)
+{
+	struct sil *sil = META(rd, sil);
+
+	return (((uint64_t) sil->array_sectors_high) << 32) +
+	       sil->array_sectors_low;
+}
+
 static void
 free_sils(struct sil **sils, unsigned int i)
 {
@@ -381,6 +391,10 @@
 	struct sil *sil = META(rd, sil);
 
 	switch (sil->type) {
+	case SIL_T_JBOD:
+		ret = array_size(rd) < rd->sectors ?
+		      1 : sil->drives_per_striped_set;
+		break;
 	case SIL_T_RAID0:
 	case SIL_T_RAID10:
 		ret = sil->drives_per_striped_set;
@@ -519,12 +533,9 @@
 static uint64_t
 sectors(struct raid_dev *rd)
 {
-	uint64_t array_sectors, ret = 0;
+	uint64_t array_sectors = array_size(rd), ret = 0;
 	struct sil *sil = META(rd, sil);
 
-	array_sectors = (((uint64_t) sil->array_sectors_high) << 32) +
-		sil->array_sectors_low;
-
 	switch (sil->type) {
 	case SIL_T_SPARE:
 		/* Cook them up... */




More information about the dm-devel mailing list