Le mardi 31 août 2010 à 13:14 +0200, Ingo Molnar a écrit :
* Eric Dumazet [off-list ref] wrote:
quoted
Seems to be commit c23f3445e68e1
(vhost: replace vhost_workqueue with per-vhost kthread)
following patch should cure it ?
Thanks
[PATCH] vhost: stop worker only if created
Its illegal to call kthread_stop(NULL)
Reported-by: Ingo Molnar <redacted>
Signed-off-by: Eric Dumazet <redacted>
---
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index e05557d..0a00121 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -323,7 +323,8 @@ void vhost_dev_cleanup(struct vhost_dev *dev)
dev->mm = NULL;
WARN_ON(!list_empty(&dev->work_list));
- kthread_stop(dev->worker);
+ if (dev->worker)
+ kthread_stop(dev->worker);
Btw., i think this check should be pushed into kthread_stop() instead -
just like kfree(NULL) is possible as well - it simplifies cleanup
sequences.
Sure !
Just in case, I resubmit the patch, clearing dev->worker, because I am
not sure if vhost_dev_cleanup() can be run several times on same struct
vhost_dev. Patch is needed even if you add this check in kthread_stop()
[PATCH v2] vhost: stop worker only if created
Its currently illegal to call kthread_stop(NULL)
Reported-by: Ingo Molnar <redacted>
Signed-off-by: Eric Dumazet <redacted>
---
drivers/vhost/vhost.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index e05557d..4b99117 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -323,7 +323,10 @@ void vhost_dev_cleanup(struct vhost_dev *dev)
dev->mm = NULL;
WARN_ON(!list_empty(&dev->work_list));
- kthread_stop(dev->worker);
+ if (dev->worker) {
+ kthread_stop(dev->worker);
+ dev->worker = NULL;
+ }
}
static int log_access_ok(void __user *log_base, u64 addr, unsigned long sz)