diff options
author | Neil Brown <neilb@suse.de> | 2006-05-15 05:57:53 +0200 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2006-05-15 05:57:53 +0200 |
commit | 8686f3ed069671e5cbf8660cfd73c92b066563d0 (patch) | |
tree | 32b6ea0570799ac73035d827dc53b60d87027e01 | |
parent | Support new offset layout for raid10 (diff) | |
download | mdadm-8686f3ed069671e5cbf8660cfd73c92b066563d0.tar.xz mdadm-8686f3ed069671e5cbf8660cfd73c92b066563d0.zip |
Fix problem with sector/KB size confuision for bitmap sizing.
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r-- | Grow.c | 2 | ||||
-rw-r--r-- | super0.c | 6 | ||||
-rw-r--r-- | sysfs.c | 4 |
3 files changed, 5 insertions, 7 deletions
@@ -272,7 +272,7 @@ int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int } if (array.level == 10) { - int ncopies = (array.layout&255)*(array.layout>>8); + int ncopies = (array.layout&255)*((array.layout>>8)&255); bitmapsize = bitmapsize * array.raid_disks / ncopies; } @@ -739,7 +739,7 @@ static int add_internal_bitmap0(struct supertype *st, void *sbv, int chunk, int * The bitmap comes immediately after the superblock and must be 60K in size * at most. The default size is between 30K and 60K * - * size is in K, chunk is in bytes !!! + * size is in sectors, chunk is in bytes !!! */ unsigned long long bits; unsigned long long max_bits = 60*1024*8; @@ -749,7 +749,7 @@ static int add_internal_bitmap0(struct supertype *st, void *sbv, int chunk, int min_chunk = 4096; /* sub-page chunks don't work yet.. */ - bits = (size * 512)/ min_chunk +1; + bits = (size * 512) / min_chunk + 1; while (bits > max_bits) { min_chunk *= 2; bits = (bits+1)/2; @@ -770,8 +770,6 @@ static int add_internal_bitmap0(struct supertype *st, void *sbv, int chunk, int bms->sync_size = __cpu_to_le64(size); bms->write_behind = __cpu_to_le32(write_behind); - - return 1; } @@ -195,7 +195,7 @@ unsigned long long get_component_size(int fd) * size field is only 32bits. * So look in /sys/block/mdXXX/md/component_size * - * WARNING: this returns in units of Kilobytes. + * This returns in units of sectors. */ struct stat stb; char fname[50]; @@ -215,7 +215,7 @@ unsigned long long get_component_size(int fd) if (n == sizeof(fname)) return 0; fname[n] = 0; - return strtoull(fname, NULL, 10); + return strtoull(fname, NULL, 10) * 2; } int sysfs_set_str(struct sysarray *sra, struct sysdev *dev, |