raid5: remove worker_cnt_per_group argument from alloc_thread_groups
We can use "cnt" directly to update conf->worker_cnt_per_group if alloc_thread_groups returns 0. Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com> Signed-off-by: Song Liu <songliubraving@fb.com>
This commit is contained in:
parent
f591df3cc6
commit
d2c9ad4124
@ -6598,7 +6598,6 @@ raid5_show_group_thread_cnt(struct mddev *mddev, char *page)
|
|||||||
|
|
||||||
static int alloc_thread_groups(struct r5conf *conf, int cnt,
|
static int alloc_thread_groups(struct r5conf *conf, int cnt,
|
||||||
int *group_cnt,
|
int *group_cnt,
|
||||||
int *worker_cnt_per_group,
|
|
||||||
struct r5worker_group **worker_groups);
|
struct r5worker_group **worker_groups);
|
||||||
static ssize_t
|
static ssize_t
|
||||||
raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
|
raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
|
||||||
@ -6607,7 +6606,7 @@ raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
|
|||||||
unsigned int new;
|
unsigned int new;
|
||||||
int err;
|
int err;
|
||||||
struct r5worker_group *new_groups, *old_groups;
|
struct r5worker_group *new_groups, *old_groups;
|
||||||
int group_cnt, worker_cnt_per_group;
|
int group_cnt;
|
||||||
|
|
||||||
if (len >= PAGE_SIZE)
|
if (len >= PAGE_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -6630,13 +6629,11 @@ raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
|
|||||||
if (old_groups)
|
if (old_groups)
|
||||||
flush_workqueue(raid5_wq);
|
flush_workqueue(raid5_wq);
|
||||||
|
|
||||||
err = alloc_thread_groups(conf, new,
|
err = alloc_thread_groups(conf, new, &group_cnt, &new_groups);
|
||||||
&group_cnt, &worker_cnt_per_group,
|
|
||||||
&new_groups);
|
|
||||||
if (!err) {
|
if (!err) {
|
||||||
spin_lock_irq(&conf->device_lock);
|
spin_lock_irq(&conf->device_lock);
|
||||||
conf->group_cnt = group_cnt;
|
conf->group_cnt = group_cnt;
|
||||||
conf->worker_cnt_per_group = worker_cnt_per_group;
|
conf->worker_cnt_per_group = new;
|
||||||
conf->worker_groups = new_groups;
|
conf->worker_groups = new_groups;
|
||||||
spin_unlock_irq(&conf->device_lock);
|
spin_unlock_irq(&conf->device_lock);
|
||||||
|
|
||||||
@ -6672,16 +6669,13 @@ static struct attribute_group raid5_attrs_group = {
|
|||||||
.attrs = raid5_attrs,
|
.attrs = raid5_attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int alloc_thread_groups(struct r5conf *conf, int cnt,
|
static int alloc_thread_groups(struct r5conf *conf, int cnt, int *group_cnt,
|
||||||
int *group_cnt,
|
|
||||||
int *worker_cnt_per_group,
|
|
||||||
struct r5worker_group **worker_groups)
|
struct r5worker_group **worker_groups)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
ssize_t size;
|
ssize_t size;
|
||||||
struct r5worker *workers;
|
struct r5worker *workers;
|
||||||
|
|
||||||
*worker_cnt_per_group = cnt;
|
|
||||||
if (cnt == 0) {
|
if (cnt == 0) {
|
||||||
*group_cnt = 0;
|
*group_cnt = 0;
|
||||||
*worker_groups = NULL;
|
*worker_groups = NULL;
|
||||||
@ -6882,7 +6876,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
|
|||||||
struct disk_info *disk;
|
struct disk_info *disk;
|
||||||
char pers_name[6];
|
char pers_name[6];
|
||||||
int i;
|
int i;
|
||||||
int group_cnt, worker_cnt_per_group;
|
int group_cnt;
|
||||||
struct r5worker_group *new_group;
|
struct r5worker_group *new_group;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -6928,10 +6922,9 @@ static struct r5conf *setup_conf(struct mddev *mddev)
|
|||||||
for (i = 0; i < PENDING_IO_MAX; i++)
|
for (i = 0; i < PENDING_IO_MAX; i++)
|
||||||
list_add(&conf->pending_data[i].sibling, &conf->free_list);
|
list_add(&conf->pending_data[i].sibling, &conf->free_list);
|
||||||
/* Don't enable multi-threading by default*/
|
/* Don't enable multi-threading by default*/
|
||||||
if (!alloc_thread_groups(conf, 0, &group_cnt, &worker_cnt_per_group,
|
if (!alloc_thread_groups(conf, 0, &group_cnt, &new_group)) {
|
||||||
&new_group)) {
|
|
||||||
conf->group_cnt = group_cnt;
|
conf->group_cnt = group_cnt;
|
||||||
conf->worker_cnt_per_group = worker_cnt_per_group;
|
conf->worker_cnt_per_group = 0;
|
||||||
conf->worker_groups = new_group;
|
conf->worker_groups = new_group;
|
||||||
} else
|
} else
|
||||||
goto abort;
|
goto abort;
|
||||||
|
Loading…
Reference in New Issue
Block a user