svn commit: r217380 - projects/graid/head/sys/geom/raid

Alexander Motin mav at FreeBSD.org
Thu Jan 13 21:53:51 UTC 2011


Author: mav
Date: Thu Jan 13 21:53:51 2011
New Revision: 217380
URL: http://svn.freebsd.org/changeset/base/217380

Log:
  Fix some math bugs in sizes calculations.

Modified:
  projects/graid/head/sys/geom/raid/md_intel.c

Modified: projects/graid/head/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_intel.c	Thu Jan 13 21:49:14 2011	(r217379)
+++ projects/graid/head/sys/geom/raid/md_intel.c	Thu Jan 13 21:53:51 2011	(r217380)
@@ -46,7 +46,7 @@ struct intel_raid_map {
 	uint32_t	offset;
 	uint32_t	disk_sectors;
 	uint32_t	stripe_count;
-	uint16_t	stripe_sectors;
+	uint16_t	strip_sectors;
 	uint8_t		status;
 #define INTEL_S_READY           0x00
 #define INTEL_S_DISABLED        0x01
@@ -278,7 +278,7 @@ g_raid_md_intel_print(struct intel_raid_
 			printf("  offset            %u\n", mmap->offset);
 			printf("  disk_sectors      %u\n", mmap->disk_sectors);
 			printf("  stripe_count      %u\n", mmap->stripe_count);
-			printf("  stripe_sectors    %u\n", mmap->stripe_sectors);
+			printf("  strip_sectors     %u\n", mmap->strip_sectors);
 			printf("  status            %u\n", mmap->status);
 			printf("  type              %u\n", mmap->type);
 			printf("  total_disks       %u\n", mmap->total_disks);
@@ -561,14 +561,14 @@ g_raid_md_intel_start(struct g_raid_soft
 		else
 			vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN;
 		vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE;
-		vol->v_strip_size = mmap->stripe_sectors * 512; //ZZZ
+		vol->v_strip_size = (u_int)mmap->strip_sectors * 512; //ZZZ
 		vol->v_disks_count = mmap->total_disks;
-		vol->v_mediasize = mvol->total_sectors * 512; //ZZZ
+		vol->v_mediasize = (off_t)mvol->total_sectors * 512; //ZZZ
 		vol->v_sectorsize = 512; //ZZZ
 		for (j = 0; j < vol->v_disks_count; j++) {
 			sd = &vol->v_subdisks[j];
-			sd->sd_offset = mmap->offset * 512; //ZZZ
-			sd->sd_size = mmap->disk_sectors;
+			sd->sd_offset = (off_t)mmap->offset * 512; //ZZZ
+			sd->sd_size = (off_t)mmap->disk_sectors * 512; //ZZZ
 		}
 		g_raid_start_volume(vol);
 	}
@@ -1362,8 +1362,7 @@ g_raid_md_write_intel(struct g_raid_md_o
 		mvol->total_sectors = vol->v_mediasize / sectorsize;
 		mmap->offset = sd->sd_offset / sectorsize;
 		mmap->disk_sectors = sd->sd_size / sectorsize;
-		mmap->stripe_count = sd->sd_size / vol->v_strip_size;
-		mmap->stripe_sectors = vol->v_strip_size / sectorsize;
+		mmap->strip_sectors = vol->v_strip_size / sectorsize;
 		mmap->status = INTEL_S_READY;
 		if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0)
 			mmap->type = INTEL_T_RAID0;
@@ -1379,6 +1378,8 @@ g_raid_md_write_intel(struct g_raid_md_o
 			mmap->total_domains = vol->v_disks_count;
 		else
 			mmap->total_domains = 1;
+		mmap->stripe_count = sd->sd_size / vol->v_strip_size /
+		    mmap->total_domains;
 		mmap->failed_disk_num = 0xff;
 		mmap->ddf = 1;
 		for (sdi = 0; sdi < vol->v_disks_count; sdi++) {


More information about the svn-src-projects mailing list