提交 c41d4ac4 编写于 作者: N NeilBrown

md/raid5: factor out code for changing size of stripe cache.

Separate the actual 'change' code from the sysfs interface
so that it can eventually be called internally.
Signed-off-by: NNeilBrown <neilb@suse.de>
上级 00bcb4ac
...@@ -4566,23 +4566,15 @@ raid5_show_stripe_cache_size(mddev_t *mddev, char *page) ...@@ -4566,23 +4566,15 @@ raid5_show_stripe_cache_size(mddev_t *mddev, char *page)
return 0; return 0;
} }
static ssize_t int
raid5_store_stripe_cache_size(mddev_t *mddev, const char *page, size_t len) raid5_set_cache_size(mddev_t *mddev, int size)
{ {
raid5_conf_t *conf = mddev->private; raid5_conf_t *conf = mddev->private;
unsigned long new;
int err; int err;
if (len >= PAGE_SIZE) if (size <= 16 || size > 32768)
return -EINVAL; return -EINVAL;
if (!conf) while (size < conf->max_nr_stripes) {
return -ENODEV;
if (strict_strtoul(page, 10, &new))
return -EINVAL;
if (new <= 16 || new > 32768)
return -EINVAL;
while (new < conf->max_nr_stripes) {
if (drop_one_stripe(conf)) if (drop_one_stripe(conf))
conf->max_nr_stripes--; conf->max_nr_stripes--;
else else
...@@ -4591,11 +4583,32 @@ raid5_store_stripe_cache_size(mddev_t *mddev, const char *page, size_t len) ...@@ -4591,11 +4583,32 @@ raid5_store_stripe_cache_size(mddev_t *mddev, const char *page, size_t len)
err = md_allow_write(mddev); err = md_allow_write(mddev);
if (err) if (err)
return err; return err;
while (new > conf->max_nr_stripes) { while (size > conf->max_nr_stripes) {
if (grow_one_stripe(conf)) if (grow_one_stripe(conf))
conf->max_nr_stripes++; conf->max_nr_stripes++;
else break; else break;
} }
return 0;
}
EXPORT_SYMBOL(raid5_set_cache_size);
static ssize_t
raid5_store_stripe_cache_size(mddev_t *mddev, const char *page, size_t len)
{
raid5_conf_t *conf = mddev->private;
unsigned long new;
int err;
if (len >= PAGE_SIZE)
return -EINVAL;
if (!conf)
return -ENODEV;
if (strict_strtoul(page, 10, &new))
return -EINVAL;
err = raid5_set_cache_size(mddev, new);
if (err)
return err;
return len; return len;
} }
......
...@@ -497,4 +497,5 @@ static inline int algorithm_is_DDF(int layout) ...@@ -497,4 +497,5 @@ static inline int algorithm_is_DDF(int layout)
{ {
return layout >= 8 && layout <= 10; return layout >= 8 && layout <= 10;
} }
extern int raid5_set_cache_size(mddev_t *mddev, int size);
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册