diff --git a/cmdline/dry.c b/cmdline/dry.c index 1f098e23..f83212ee 100644 --- a/cmdline/dry.c +++ b/cmdline/dry.c @@ -191,7 +191,9 @@ static int state_dry_process(struct snapraid_state* state, struct snapraid_parit /* initialize the io threads */ io_init(&io, state, state->opt.io_cache, buffermax, dry_data_reader, handle, diskmax, dry_parity_reader, 0, parity_handle, state->level); - waiting_map = malloc_nofail((diskmax + RAID_PARITY_MAX) * sizeof(unsigned)); + /* possibly waiting disks */ + waiting_mac = diskmax > RAID_PARITY_MAX ? diskmax : RAID_PARITY_MAX; + waiting_map = malloc_nofail(waiting_mac * sizeof(unsigned)); error = 0; io_error = 0; diff --git a/cmdline/scrub.c b/cmdline/scrub.c index c828a7e4..bd582199 100644 --- a/cmdline/scrub.c +++ b/cmdline/scrub.c @@ -279,7 +279,9 @@ static int state_scrub_process(struct snapraid_state* state, struct snapraid_par /* initialize the io threads */ io_init(&io, state, state->opt.io_cache, buffermax, scrub_data_reader, handle, diskmax, scrub_parity_reader, 0, parity_handle, state->level); - waiting_map = malloc_nofail((diskmax + RAID_PARITY_MAX) * sizeof(unsigned)); + /* possibly waiting disks */ + waiting_mac = diskmax > RAID_PARITY_MAX ? diskmax : RAID_PARITY_MAX; + waiting_map = malloc_nofail(waiting_mac * sizeof(unsigned)); error = 0; silent_error = 0; diff --git a/cmdline/sync.c b/cmdline/sync.c index b597b03a..c33a5a3e 100644 --- a/cmdline/sync.c +++ b/cmdline/sync.c @@ -713,7 +713,10 @@ static int state_sync_process(struct snapraid_state* state, struct snapraid_pari failed = malloc_nofail(diskmax * sizeof(struct failed_struct)); failed_map = malloc_nofail(diskmax * sizeof(unsigned)); - waiting_map = malloc_nofail((diskmax + RAID_PARITY_MAX) * sizeof(unsigned)); + + /* possibly waiting disks */ + waiting_mac = diskmax > RAID_PARITY_MAX ? diskmax : RAID_PARITY_MAX; + waiting_map = malloc_nofail(waiting_mac * sizeof(unsigned)); error = 0; silent_error = 0;