md: make 'name' arg to md_register_thread non-optional.
Having the 'name' arg optional and defaulting to the current personality name is no necessary and leads to errors, as when changing the level of an array we can end up using the name of the old level instead of the new one. So make it non-optional and always explicitly pass the name of the level that the array will be. Reported-by: majianpeng <majianpeng@gmail.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
055d3747db
commit
0232605d98
@ -6751,7 +6751,7 @@ struct md_thread *md_register_thread(void (*run) (struct mddev *), struct mddev
|
||||
thread->tsk = kthread_run(md_thread, thread,
|
||||
"%s_%s",
|
||||
mdname(thread->mddev),
|
||||
name ?: mddev->pers->name);
|
||||
name);
|
||||
if (IS_ERR(thread->tsk)) {
|
||||
kfree(thread);
|
||||
return NULL;
|
||||
|
@ -474,7 +474,8 @@ static int multipath_run (struct mddev *mddev)
|
||||
}
|
||||
|
||||
{
|
||||
mddev->thread = md_register_thread(multipathd, mddev, NULL);
|
||||
mddev->thread = md_register_thread(multipathd, mddev,
|
||||
"multipath");
|
||||
if (!mddev->thread) {
|
||||
printk(KERN_ERR "multipath: couldn't allocate thread"
|
||||
" for %s\n", mdname(mddev));
|
||||
|
@ -2621,7 +2621,7 @@ static struct r1conf *setup_conf(struct mddev *mddev)
|
||||
goto abort;
|
||||
}
|
||||
err = -ENOMEM;
|
||||
conf->thread = md_register_thread(raid1d, mddev, NULL);
|
||||
conf->thread = md_register_thread(raid1d, mddev, "raid1");
|
||||
if (!conf->thread) {
|
||||
printk(KERN_ERR
|
||||
"md/raid1:%s: couldn't allocate thread\n",
|
||||
|
@ -3427,7 +3427,7 @@ static struct r10conf *setup_conf(struct mddev *mddev)
|
||||
spin_lock_init(&conf->resync_lock);
|
||||
init_waitqueue_head(&conf->wait_barrier);
|
||||
|
||||
conf->thread = md_register_thread(raid10d, mddev, NULL);
|
||||
conf->thread = md_register_thread(raid10d, mddev, "raid10");
|
||||
if (!conf->thread)
|
||||
goto out;
|
||||
|
||||
|
@ -4840,6 +4840,7 @@ static struct r5conf *setup_conf(struct mddev *mddev)
|
||||
int raid_disk, memory, max_disks;
|
||||
struct md_rdev *rdev;
|
||||
struct disk_info *disk;
|
||||
char pers_name[6];
|
||||
|
||||
if (mddev->new_level != 5
|
||||
&& mddev->new_level != 4
|
||||
@ -4963,7 +4964,8 @@ static struct r5conf *setup_conf(struct mddev *mddev)
|
||||
printk(KERN_INFO "md/raid:%s: allocated %dkB\n",
|
||||
mdname(mddev), memory);
|
||||
|
||||
conf->thread = md_register_thread(raid5d, mddev, NULL);
|
||||
sprintf(pers_name, "raid%d", mddev->new_level);
|
||||
conf->thread = md_register_thread(raid5d, mddev, pers_name);
|
||||
if (!conf->thread) {
|
||||
printk(KERN_ERR
|
||||
"md/raid:%s: couldn't allocate thread.\n",
|
||||
|
Loading…
Reference in New Issue
Block a user