summaryrefslogtreecommitdiff
path: root/super-ddf.c
diff options
context:
space:
mode:
authormwilck@arcor.de <mwilck@arcor.de>2013-07-18 20:49:00 +0200
committerNeilBrown <neilb@suse.de>2013-07-22 16:56:32 +1000
commit8e9387ac9f309f63d6596a6f89a8281b0099ea9d (patch)
tree56ab03e42e796e0aab6caf64ae126fca02e9d353 /super-ddf.c
parent35c3606df71e50859072e248489f2469f3c8edd6 (diff)
DDF: make "null_aligned" a static buffer
Use a static buffer for this "zero page". This makes it easier to factor out the header writing code. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super-ddf.c')
-rw-r--r--super-ddf.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/super-ddf.c b/super-ddf.c
index e5007b94..efdba6d0 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -2756,14 +2756,21 @@ static int remove_from_super_ddf(struct supertype *st, mdu_disk_info_t *dk)
*/
#define NULL_CONF_SZ 4096
-static int __write_ddf_structure(struct dl *d, struct ddf_super *ddf, __u8 type,
- char *null_aligned)
+static char *null_aligned;
+static int __write_ddf_structure(struct dl *d, struct ddf_super *ddf, __u8 type)
{
unsigned long long sector;
struct ddf_header *header;
int fd, i, n_config, conf_size;
int ret = 0;
+ if (null_aligned == NULL) {
+ if (posix_memalign((void **)&null_aligned, 4096, NULL_CONF_SZ)
+ != 0)
+ return 0;
+ memset(null_aligned, 0xff, NULL_CONF_SZ);
+ }
+
fd = d->fd;
switch (type) {
@@ -2864,14 +2871,9 @@ static int __write_init_super_ddf(struct supertype *st)
int attempts = 0;
int successes = 0;
unsigned long long size;
- char *null_aligned;
__u32 seq;
pr_state(ddf, __func__);
- if (posix_memalign((void**)&null_aligned, 4096, NULL_CONF_SZ) != 0) {
- return -ENOMEM;
- }
- memset(null_aligned, 0xff, NULL_CONF_SZ);
seq = ddf->active->seq;
@@ -2916,12 +2918,10 @@ static int __write_init_super_ddf(struct supertype *st)
ddf->anchor.seq = 0xFFFFFFFF; /* no sequencing in anchor */
ddf->anchor.crc = calc_crc(&ddf->anchor, 512);
- if (!__write_ddf_structure(d, ddf, DDF_HEADER_PRIMARY,
- null_aligned))
+ if (!__write_ddf_structure(d, ddf, DDF_HEADER_PRIMARY))
continue;
- if (!__write_ddf_structure(d, ddf, DDF_HEADER_SECONDARY,
- null_aligned))
+ if (!__write_ddf_structure(d, ddf, DDF_HEADER_SECONDARY))
continue;
lseek64(fd, (size-1)*512, SEEK_SET);
@@ -2929,7 +2929,6 @@ static int __write_init_super_ddf(struct supertype *st)
continue;
successes++;
}
- free(null_aligned);
return attempts != successes;
}