Skip to contentSkip to conversation

vhost: use kthread_run macro

PATCH In review Bandan Das 2 participants 2 messages Apr 14, 2015 – Apr 15, 2015

Subsystems (4)
lore
Share & tools
lore

Bandan Das

author
#0 lore raw

PATCH 1/1 vhost: use kthread_run macro

Code Cleanup, kthread_run is a convenient wrapper around kthread_create() that even wakes up the process for us. Use it and remove no longer needed temp task_struct variable.

---
 drivers/vhost/vhost.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/vhost/vhost.c +4 -8
index 2ee2826..9ac66f7 100644
@@ -366,7 +366,6 @@ EXPORT_SYMBOL_GPL(vhost_dev_has_owner);
 /* Caller should have device mutex */
 long vhost_dev_set_owner(struct vhost_dev *dev)
 {
-	struct task_struct *worker;
 	int err;
 
 	/* Is there an owner already? */
@@ -377,15 +376,12 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
 
 	/* No owner, become one */
 	dev->mm = get_task_mm(current);
-	worker = kthread_create(vhost_worker, dev, "vhost-%d", current->pid);
-	if (IS_ERR(worker)) {
-		err = PTR_ERR(worker);
+	dev->worker = kthread_run(vhost_worker, dev, "vhost-%d", current->pid);
+	if (IS_ERR(dev->worker)) {
+		err = PTR_ERR(dev->worker);
 		goto err_worker;
 	}
 
-	dev->worker = worker;
-	wake_up_process(worker);	/* avoid contributing to loadavg */
-
 	err = vhost_attach_cgroups(dev);
 	if (err)
 		goto err_cgroup;
@@ -396,7 +392,7 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
 
 	return 0;
 err_cgroup:
-	kthread_stop(worker);
+	kthread_stop(dev->worker);
 	dev->worker = NULL;
 err_worker:
 	if (dev->mm)
Signature · 1 line
2.1.0
#1 lore raw
Quoted 24 lines · Bandan Das

Code Cleanup, kthread_run is a convenient wrapper around kthread_create() that even wakes up the process for us. Use it and remove no longer needed temp task_struct variable.

---
 drivers/vhost/vhost.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/vhost/vhost.c +0 -1
index 2ee2826..9ac66f7 100644
@@ -366,7 +366,6 @@ EXPORT_SYMBOL_GPL(vhost_dev_has_owner);
 /* Caller should have device mutex */
 long vhost_dev_set_owner(struct vhost_dev *dev)
 {
-	struct task_struct *worker;
 	int err;
 
 	/* Is there an owner already? */

drivers/vhost/vhost.c long vhost_dev_set_owner(struct vhost_dev *dev) · line 382

Quoted 10 lines
drivers/vhost/vhost.c +3 -3
@@ -377,15 +376,12 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
 
 	/* No owner, become one */
 	dev->mm = get_task_mm(current);
-	worker = kthread_create(vhost_worker, dev, "vhost-%d", current->pid);
-	if (IS_ERR(worker)) {
-		err = PTR_ERR(worker);
+	dev->worker = kthread_run(vhost_worker, dev, "vhost-%d", current->pid);
+	if (IS_ERR(dev->worker)) {
+		err = PTR_ERR(dev->worker);
 		goto err_worker;

If you do it like this, dev->worker is not initialized when thread starts running. As thread itself might queue entries using vhost_work_queue, this seems wrong.

Quoted 19 lines
drivers/vhost/vhost.c +1 -4
 	}
 
-	dev->worker = worker;
-	wake_up_process(worker);	/* avoid contributing to loadavg */
-
 	err = vhost_attach_cgroups(dev);
 	if (err)
 		goto err_cgroup;
@@ -396,7 +392,7 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
 
 	return 0;
 err_cgroup:
-	kthread_stop(worker);
+	kthread_stop(dev->worker);
 	dev->worker = NULL;
 err_worker:
 	if (dev->mm)
Signature · 1 line
2.1.0