md/raid5: make sure stripe_size as power of two
Commit3b5408b98e
("md/raid5: support config stripe_size by sysfs entry") make stripe_size as a configurable value. It just requires stripe_size as multiple of 4KB. In fact, we should make sure stripe_size as power of two. Otherwise, stripe_shift which is the result of ilog2 can not represent the real stripe_size. Then, stripe_hash() and stripe_hash_locks_hash() may get unexpected value. Fixes:3b5408b98e
("md/raid5: support config stripe_size by sysfs entry") Signed-off-by: Yufen Yu <yuyufen@huawei.com> Signed-off-by: Song Liu <songliubraving@fb.com>
This commit is contained in:
parent
79e5dc59e2
commit
6af10a33c5
|
@ -6514,9 +6514,12 @@ raid5_store_stripe_size(struct mddev *mddev, const char *page, size_t len)
|
|||
|
||||
/*
|
||||
* The value should not be bigger than PAGE_SIZE. It requires to
|
||||
* be multiple of DEFAULT_STRIPE_SIZE.
|
||||
* be multiple of DEFAULT_STRIPE_SIZE and the value should be power
|
||||
* of two.
|
||||
*/
|
||||
if (new % DEFAULT_STRIPE_SIZE != 0 || new > PAGE_SIZE || new == 0)
|
||||
if (new % DEFAULT_STRIPE_SIZE != 0 ||
|
||||
new > PAGE_SIZE || new == 0 ||
|
||||
new != roundup_pow_of_two(new))
|
||||
return -EINVAL;
|
||||
|
||||
err = mddev_lock(mddev);
|
||||
|
|
Loading…
Reference in New Issue
Block a user