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>
This commit is contained in:
mwilck@arcor.de 2013-07-18 20:49:00 +02:00 committed by NeilBrown
parent 35c3606df7
commit 8e9387ac9f
1 changed files with 11 additions and 12 deletions

View File

@ -2756,14 +2756,21 @@ static int remove_from_super_ddf(struct supertype *st, mdu_disk_info_t *dk)
*/ */
#define NULL_CONF_SZ 4096 #define NULL_CONF_SZ 4096
static int __write_ddf_structure(struct dl *d, struct ddf_super *ddf, __u8 type, static char *null_aligned;
char *null_aligned) static int __write_ddf_structure(struct dl *d, struct ddf_super *ddf, __u8 type)
{ {
unsigned long long sector; unsigned long long sector;
struct ddf_header *header; struct ddf_header *header;
int fd, i, n_config, conf_size; int fd, i, n_config, conf_size;
int ret = 0; 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; fd = d->fd;
switch (type) { switch (type) {
@ -2864,14 +2871,9 @@ static int __write_init_super_ddf(struct supertype *st)
int attempts = 0; int attempts = 0;
int successes = 0; int successes = 0;
unsigned long long size; unsigned long long size;
char *null_aligned;
__u32 seq; __u32 seq;
pr_state(ddf, __func__); 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; 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.seq = 0xFFFFFFFF; /* no sequencing in anchor */
ddf->anchor.crc = calc_crc(&ddf->anchor, 512); ddf->anchor.crc = calc_crc(&ddf->anchor, 512);
if (!__write_ddf_structure(d, ddf, DDF_HEADER_PRIMARY, if (!__write_ddf_structure(d, ddf, DDF_HEADER_PRIMARY))
null_aligned))
continue; continue;
if (!__write_ddf_structure(d, ddf, DDF_HEADER_SECONDARY, if (!__write_ddf_structure(d, ddf, DDF_HEADER_SECONDARY))
null_aligned))
continue; continue;
lseek64(fd, (size-1)*512, SEEK_SET); lseek64(fd, (size-1)*512, SEEK_SET);
@ -2929,7 +2929,6 @@ static int __write_init_super_ddf(struct supertype *st)
continue; continue;
successes++; successes++;
} }
free(null_aligned);
return attempts != successes; return attempts != successes;
} }