X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=bitmap.c;h=c27688c5815951bd5388cab80ad7d839c7e53866;hp=beef2dcdbb3d558ad5c81da1d16ce6b6774006ca;hb=refs%2Fheads%2Fmdadm-3.2.x;hpb=ebeb36638225e86826052400c1c538857bc7c461 diff --git a/bitmap.c b/bitmap.c index beef2dcd..c27688c5 100644 --- a/bitmap.c +++ b/bitmap.c @@ -130,9 +130,9 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief) unsigned long long total_bits = 0, read_bits = 0, dirty_bits = 0; bitmap_info_t *info; void *buf; - int n, skip; + unsigned int n, skip; - if (posix_memalign(&buf, 512, 8192) != 0) { + if (posix_memalign(&buf, 4096, 8192) != 0) { fprintf(stderr, Name ": failed to allocate 8192 bytes\n"); return NULL; } @@ -147,6 +147,7 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief) fprintf(stderr, Name ": failed to allocate %zd bytes\n", sizeof(*info)); #endif + free(buf); return NULL; } @@ -154,6 +155,7 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief) fprintf(stderr, Name ": failed to read superblock of bitmap " "file: %s\n", strerror(errno)); free(info); + free(buf); return NULL; } memcpy(&info->sb, buf, sizeof(info->sb)); @@ -198,6 +200,7 @@ bitmap_info_t *bitmap_fd_read(int fd, int brief) total_bits = read_bits; } out: + free(buf); info->total_bits = total_bits; info->dirty_bits = dirty_bits; return info; @@ -331,7 +334,7 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st) goto free_info; printf(" Bitmap : %llu bits (chunks), %llu dirty (%2.1f%%)\n", info->total_bits, info->dirty_bits, - 100.0 * info->dirty_bits / (info->total_bits + 1)); + 100.0 * info->dirty_bits / (info->total_bits?:1)); free_info: free(info); return rv; @@ -373,7 +376,7 @@ int CreateBitmap(char *filename, int force, char uuid[16], */ chunksize = DEFAULT_BITMAP_CHUNK; /* <<20 for 2^20 chunks, >>9 to convert bytes to sectors */ - while (array_size > (chunksize << (20-9))) + while (array_size > ((unsigned long long)chunksize << (20-9))) chunksize <<= 1; }