diff --git a/drivers/md/md.c b/drivers/md/md.c
index 709755f..f758a57 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -6621,6 +6621,8 @@ struct md_thread *md_register_thread(void (*run) (struct md_thread *),
 		struct mddev *mddev, const char *name)
 {
 	struct md_thread *thread;
+	struct md_rdev *rdev;
+	int node = 0;
 
 	thread = kzalloc(sizeof(struct md_thread), GFP_KERNEL);
 	if (!thread)
@@ -6631,14 +6633,20 @@ struct md_thread *md_register_thread(void (*run) (struct md_thread *),
 	thread->run = run;
 	thread->mddev = mddev;
 	thread->timeout = MAX_SCHEDULE_TIMEOUT;
-	thread->tsk = kthread_run(md_thread, thread,
-				  "%s_%s",
-				  mdname(thread->mddev),
-				  name);
+
+	rdev = list_first_entry(&mddev->disks, struct md_rdev, same_set);
+	node = dev_to_node(rdev->bdev->bd_contains->bd_disk->driverfs_dev);
+
+	thread->tsk = kthread_create_on_node(md_thread, thread,
+				  node, "%s_%s", mdname(thread->mddev), name);
 	if (IS_ERR(thread->tsk)) {
 		kfree(thread);
 		return NULL;
 	}
+
+	set_cpus_allowed_ptr(thread->tsk, cpumask_of_node(node));
+
+	wake_up_process(thread->tsk);
 	return thread;
 }
 EXPORT_SYMBOL(md_register_thread);
