DF-1885 / fix.diff
diff --git a/sys/dev/raid/vinum/vinumrevive.c b/sys/dev/raid/vinum/vinumrevive.c --- a/sys/dev/raid/vinum/vinumrevive.c +++ b/sys/dev/raid/vinum/vinumrevive.c @@ -514,7 +514,11 @@ plex->stripesize << DEV_BSHIFT); else sd->init_blocksize = DEFAULT_REVIVE_BLOCKSIZE; - } else if (sd->init_blocksize > MAX_REVIVE_BLOCKSIZE) + } else if (sd->init_blocksize < DEV_BSIZE) + sd->init_blocksize = DEFAULT_REVIVE_BLOCKSIZE; + else if ((sd->init_blocksize & (DEV_BSIZE - 1)) != 0) + sd->init_blocksize = DEFAULT_REVIVE_BLOCKSIZE; + else if (sd->init_blocksize > MAX_REVIVE_BLOCKSIZE) sd->init_blocksize = MAX_REVIVE_BLOCKSIZE; size = u64min(sd->init_blocksize >> DEV_BSHIFT, sd->sectors - sd->initialized) << DEV_BSHIFT; |