Module Name:    src
Committed By:   enami
Date:           Sat Feb 19 07:11:10 UTC 2011

Modified Files:
        src/sbin/raidctl: raidctl.c
        src/sys/dev/raidframe: raidframevar.h rf_copyback.c rf_disks.c
            rf_netbsdkintf.c rf_reconstruct.c

Log Message:
Define accessors for number of blocks and partition size in the
component label and use them where appropriate.  Disscussed on tech-kern.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sbin/raidctl/raidctl.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/raidframe/raidframevar.h
cvs rdiff -u -r1.44 -r1.45 src/sys/dev/raidframe/rf_copyback.c
cvs rdiff -u -r1.77 -r1.78 src/sys/dev/raidframe/rf_disks.c
cvs rdiff -u -r1.281 -r1.282 src/sys/dev/raidframe/rf_netbsdkintf.c
cvs rdiff -u -r1.110 -r1.111 src/sys/dev/raidframe/rf_reconstruct.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/raidctl/raidctl.c
diff -u src/sbin/raidctl/raidctl.c:1.51 src/sbin/raidctl/raidctl.c:1.52
--- src/sbin/raidctl/raidctl.c:1.51	Wed Feb  9 11:22:49 2011
+++ src/sbin/raidctl/raidctl.c	Sat Feb 19 07:11:10 2011
@@ -1,4 +1,4 @@
-/*      $NetBSD: raidctl.c,v 1.51 2011/02/09 11:22:49 pooka Exp $   */
+/*      $NetBSD: raidctl.c,v 1.52 2011/02/19 07:11:10 enami Exp $   */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: raidctl.c,v 1.51 2011/02/09 11:22:49 pooka Exp $");
+__RCSID("$NetBSD: raidctl.c,v 1.52 2011/02/19 07:11:10 enami Exp $");
 #endif
 
 
@@ -743,9 +743,9 @@
 	printf("   sectPerSU: %d, SUsPerPU: %d, SUsPerRU: %d\n",
 	       component_label.sectPerSU, component_label.SUsPerPU, 
 	       component_label.SUsPerRU);
-	printf("   Queue size: %d, blocksize: %d, numBlocks: %u\n",
+	printf("   Queue size: %d, blocksize: %d, numBlocks: %"PRIu64"\n",
 	       component_label.maxOutstanding, component_label.blockSize,
-	       component_label.numBlocks);
+	       rf_component_label_numblocks(&component_label));
 	printf("   RAID Level: %c\n", (char) component_label.parityConfig);
 	printf("   Autoconfig: %s\n", 
 	       component_label.autoconfigure ? "Yes" : "No" );

Index: src/sys/dev/raidframe/raidframevar.h
diff -u src/sys/dev/raidframe/raidframevar.h:1.14 src/sys/dev/raidframe/raidframevar.h:1.15
--- src/sys/dev/raidframe/raidframevar.h:1.14	Mon Nov  1 02:35:24 2010
+++ src/sys/dev/raidframe/raidframevar.h	Sat Feb 19 07:11:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: raidframevar.h,v 1.14 2010/11/01 02:35:24 mrg Exp $ */
+/*	$NetBSD: raidframevar.h,v 1.15 2011/02/19 07:11:09 enami Exp $ */
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -444,9 +444,9 @@
 	int maxOutstanding;   /* maxOutstanding disk requests */
 	int blockSize;        /* size of component block.
 				 (disklabel->d_secsize) */
-	u_int numBlocks;      /* number of blocks on this component.  May
+	u_int __numBlocks;    /* number of blocks on this component.  May
 			         be smaller than the partition size. */
-	u_int partitionSize;  /* number of blocks on this *partition*.
+	u_int __partitionSize;/* number of blocks on this *partition*.
 				 Must exactly match the partition size
 				 from the disklabel. */
 	/* Parity map stuff. */
@@ -476,6 +476,43 @@
 	int future_use2[42];  /* More future expansion */
 } RF_ComponentLabel_t;
 
+/*
+ * Following four functions are access macros for the number of blocks
+ * and partition size in component label.
+ */
+static inline RF_SectorCount_t
+rf_component_label_numblocks(const RF_ComponentLabel_t *cl)
+{
+
+	return ((RF_SectorCount_t)cl->numBlocksHi << 32) |
+	    cl->__numBlocks;
+}
+
+static inline void
+rf_component_label_set_numblocks(RF_ComponentLabel_t *cl, RF_SectorCount_t siz)
+{
+
+	cl->numBlocksHi = siz >> 32;
+	cl->__numBlocks = siz;
+}
+
+static inline RF_SectorCount_t
+rf_component_label_partitionsize(const RF_ComponentLabel_t *cl)
+{
+
+	return ((RF_SectorCount_t)cl->partitionSizeHi << 32) |
+	    cl->__partitionSize;
+}
+
+static inline void
+rf_component_label_set_partitionsize(RF_ComponentLabel_t *cl,
+    RF_SectorCount_t siz)
+{
+
+	cl->partitionSizeHi = siz >> 32;
+	cl->__partitionSize = siz;
+}
+
 typedef struct RF_SingleComponent_s {
 	int row;
 	int column;

Index: src/sys/dev/raidframe/rf_copyback.c
diff -u src/sys/dev/raidframe/rf_copyback.c:1.44 src/sys/dev/raidframe/rf_copyback.c:1.45
--- src/sys/dev/raidframe/rf_copyback.c:1.44	Fri Nov 19 06:44:40 2010
+++ src/sys/dev/raidframe/rf_copyback.c	Sat Feb 19 07:11:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf_copyback.c,v 1.44 2010/11/19 06:44:40 dholland Exp $	*/
+/*	$NetBSD: rf_copyback.c,v 1.45 2011/02/19 07:11:09 enami Exp $	*/
 /*
  * Copyright (c) 1995 Carnegie-Mellon University.
  * All rights reserved.
@@ -38,7 +38,7 @@
  ****************************************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.44 2010/11/19 06:44:40 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.45 2011/02/19 07:11:09 enami Exp $");
 
 #include <dev/raidframe/raidframevar.h>
 
@@ -222,8 +222,8 @@
 
 	c_label->row = 0;
 	c_label->column = fcol;
-	c_label->partitionSize = raidPtr->Disks[fcol].partitionSize;
-	c_label->partitionSizeHi = raidPtr->Disks[fcol].partitionSize >> 32;
+	rf_component_label_set_partitionsize(c_label,
+	    raidPtr->Disks[fcol].partitionSize);
 
 	raidflush_component_label(raidPtr, fcol);
 

Index: src/sys/dev/raidframe/rf_disks.c
diff -u src/sys/dev/raidframe/rf_disks.c:1.77 src/sys/dev/raidframe/rf_disks.c:1.78
--- src/sys/dev/raidframe/rf_disks.c:1.77	Sun Feb 13 06:17:35 2011
+++ src/sys/dev/raidframe/rf_disks.c	Sat Feb 19 07:11:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf_disks.c,v 1.77 2011/02/13 06:17:35 enami Exp $	*/
+/*	$NetBSD: rf_disks.c,v 1.78 2011/02/19 07:11:09 enami Exp $	*/
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -60,7 +60,7 @@
  ***************************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.77 2011/02/13 06:17:35 enami Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.78 2011/02/19 07:11:09 enami Exp $");
 
 #include <dev/raidframe/raidframevar.h>
 
@@ -455,9 +455,8 @@
 		if (ac!=NULL) {
 			/* Found it.  Configure it.. */
 			diskPtr->blockSize = ac->clabel->blockSize;
-			diskPtr->numBlocks = ac->clabel->numBlocks;
-			diskPtr->numBlocks |=
-			    (uint64_t)ac->clabel->numBlocksHi << 32;
+			diskPtr->numBlocks =
+			    rf_component_label_numblocks(ac->clabel);
 			/* Note: rf_protectedSectors is already
 			   factored into numBlocks here */
 			raidPtr->raid_cinfo[c].ci_vp = ac->vp;

Index: src/sys/dev/raidframe/rf_netbsdkintf.c
diff -u src/sys/dev/raidframe/rf_netbsdkintf.c:1.281 src/sys/dev/raidframe/rf_netbsdkintf.c:1.282
--- src/sys/dev/raidframe/rf_netbsdkintf.c:1.281	Tue Feb  8 20:20:27 2011
+++ src/sys/dev/raidframe/rf_netbsdkintf.c	Sat Feb 19 07:11:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf_netbsdkintf.c,v 1.281 2011/02/08 20:20:27 rmind Exp $	*/
+/*	$NetBSD: rf_netbsdkintf.c,v 1.282 2011/02/19 07:11:09 enami Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc.
@@ -101,7 +101,7 @@
  ***********************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.281 2011/02/08 20:20:27 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.282 2011/02/19 07:11:09 enami Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -1299,8 +1299,8 @@
 				ci_label->serial_number = 
 				    raidPtr->serial_number;
 				ci_label->row = 0; /* we dont' pretend to support more */
-				ci_label->partitionSize =
-				    diskPtr->partitionSize;
+				rf_component_label_set_partitionsize(ci_label,
+				    diskPtr->partitionSize);
 				ci_label->column = column;
 				raidflush_component_label(raidPtr, column);
 			}
@@ -2949,7 +2949,7 @@
 	if (!raidread_component_label(secsize, dev, vp, clabel)) {
 		/* Got the label.  Does it look reasonable? */
 		if (rf_reasonable_label(clabel) && 
-		    (clabel->partitionSize <= size)) {
+		    (rf_component_label_partitionsize(clabel) <= size)) {
 			rf_fix_old_label_size(clabel, numsecs);
 #ifdef DEBUG
 			printf("Component on: %s: %llu\n",
@@ -3151,7 +3151,12 @@
 	    clabel->row < clabel->num_rows &&
 	    clabel->column < clabel->num_columns &&
 	    clabel->blockSize > 0 &&
-	    clabel->numBlocks > 0) {
+	    /*
+	     * numBlocksHi may contain garbage, but it is ok since
+	     * the type is unsigned.  If it is really garbage,
+	     * rf_fix_old_label_size() will fix it.
+	     */
+	    rf_component_label_numblocks(clabel) > 0) {
 		/* label looks reasonable enough... */
 		return(1);
 	}
@@ -3181,9 +3186,9 @@
 void
 rf_print_component_label(RF_ComponentLabel_t *clabel)
 {
-	uint64_t numBlocks = clabel->numBlocks;
+	uint64_t numBlocks;
 
-	numBlocks |= (uint64_t)clabel->numBlocksHi << 32;
+	numBlocks = rf_component_label_numblocks(clabel);
 
 	printf("   Row: %d Column: %d Num Rows: %d Num Columns: %d\n",
 	       clabel->row, clabel->column,
@@ -3316,8 +3321,8 @@
 	    (clabel1->parityConfig == clabel2->parityConfig) &&
 	    (clabel1->maxOutstanding == clabel2->maxOutstanding) &&
 	    (clabel1->blockSize == clabel2->blockSize) &&
-	    (clabel1->numBlocks == clabel2->numBlocks) &&
-	    (clabel1->numBlocksHi == clabel2->numBlocksHi) &&
+	    rf_component_label_numblocks(clabel1) ==
+	    rf_component_label_numblocks(clabel2) &&
 	    (clabel1->autoconfigure == clabel2->autoconfigure) &&
 	    (clabel1->root_partition == clabel2->root_partition) &&
 	    (clabel1->last_unit == clabel2->last_unit) &&
@@ -3581,8 +3586,7 @@
 	clabel->SUsPerRU = raidPtr->Layout.SUsPerRU;
 
 	clabel->blockSize = raidPtr->bytesPerSector;
-	clabel->numBlocks = raidPtr->sectorsPerDisk;
-	clabel->numBlocksHi = raidPtr->sectorsPerDisk >> 32;
+	rf_component_label_set_numblocks(clabel, raidPtr->sectorsPerDisk);
 
 	/* XXX not portable */
 	clabel->parityConfig = raidPtr->Layout.map->parityConfig;

Index: src/sys/dev/raidframe/rf_reconstruct.c
diff -u src/sys/dev/raidframe/rf_reconstruct.c:1.110 src/sys/dev/raidframe/rf_reconstruct.c:1.111
--- src/sys/dev/raidframe/rf_reconstruct.c:1.110	Fri Nov 19 06:44:40 2010
+++ src/sys/dev/raidframe/rf_reconstruct.c	Sat Feb 19 07:11:09 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf_reconstruct.c,v 1.110 2010/11/19 06:44:40 dholland Exp $	*/
+/*	$NetBSD: rf_reconstruct.c,v 1.111 2011/02/19 07:11:09 enami Exp $	*/
 /*
  * Copyright (c) 1995 Carnegie-Mellon University.
  * All rights reserved.
@@ -33,7 +33,7 @@
  ************************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.110 2010/11/19 06:44:40 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.111 2011/02/19 07:11:09 enami Exp $");
 
 #include <sys/param.h>
 #include <sys/time.h>
@@ -297,9 +297,8 @@
 		c_label->column = col;
 		c_label->clean = RF_RAID_DIRTY;
 		c_label->status = rf_ds_optimal;
-		c_label->partitionSize = raidPtr->Disks[scol].partitionSize;
-		c_label->partitionSizeHi =
-		   raidPtr->Disks[scol].partitionSize >> 32;
+		rf_component_label_set_partitionsize(c_label,
+		    raidPtr->Disks[scol].partitionSize);
 
 		/* We've just done a rebuild based on all the other
 		   disks, so at this point the parity is known to be

Reply via email to