Use single threaded work queue.
[cascardo/kernel/samples/workqueue/.git] / wq.c
diff --git a/wq.c b/wq.c
index 1d5fe38..1818794 100644 (file)
--- a/wq.c
+++ b/wq.c
 
 MODULE_LICENSE("GPL");
 
+static struct workqueue_struct *mywq;
+
 static void do_mywork(struct work_struct *data)
 {
        printk(KERN_INFO "I've been scheduled.\n");
+       queue_delayed_work(mywq, to_delayed_work(data), 8 * HZ);
 }
 
 DECLARE_DELAYED_WORK(mywork, do_mywork);
-static struct workqueue_struct *mywq;
 
 static int mywq_init(void)
 {
@@ -41,6 +43,7 @@ static int mywq_init(void)
 
 static void mywq_exit(void)
 {
+       cancel_delayed_work_sync(&mywork);
        flush_workqueue(mywq);
        destroy_workqueue(mywq);
 }