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:
parent
35c3606df7
commit
8e9387ac9f
23
super-ddf.c
23
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
|
#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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue