summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--super0.c8
-rw-r--r--super1.c7
2 files changed, 10 insertions, 5 deletions
diff --git a/super0.c b/super0.c
index dab85db8..d53f025e 100644
--- a/super0.c
+++ b/super0.c
@@ -1065,13 +1065,11 @@ static int write_bitmap0(struct supertype *st, int fd)
int rv = 0;
int towrite, n;
- char abuf[4096+4096];
- char *buf = (char*)(((long)(abuf+4096))&~4095L);
+ void *buf;
if (!get_dev_size(fd, NULL, &dsize))
return 1;
-
if (dsize < MD_RESERVED_SECTORS*512)
return -1;
@@ -1082,6 +1080,9 @@ static int write_bitmap0(struct supertype *st, int fd)
if (lseek64(fd, offset + 4096, 0)< 0LL)
return 3;
+ if (posix_memalign(&buf, 4096, 4096))
+ return -ENOMEM;
+
memset(buf, 0xff, 4096);
memcpy(buf, ((char*)sb)+MD_SB_BYTES, sizeof(bitmap_super_t));
towrite = 60*1024;
@@ -1100,6 +1101,7 @@ static int write_bitmap0(struct supertype *st, int fd)
if (towrite)
rv = -2;
+ free(buf);
return rv;
}
diff --git a/super1.c b/super1.c
index cfa237a0..a18952a7 100644
--- a/super1.c
+++ b/super1.c
@@ -1641,12 +1641,14 @@ static int write_bitmap1(struct supertype *st, int fd)
struct mdp_superblock_1 *sb = st->sb;
bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb)+1024);
int rv = 0;
-
+ void *buf;
int towrite, n;
- char buf[4096];
locate_bitmap1(st, fd);
+ if (posix_memalign(&buf, 4096, 4096))
+ return -ENOMEM;
+
memset(buf, 0xff, 4096);
memcpy(buf, ((char*)sb)+1024, sizeof(bitmap_super_t));
@@ -1669,6 +1671,7 @@ static int write_bitmap1(struct supertype *st, int fd)
if (towrite)
rv = -2;
+ free(buf);
return rv;
}