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