mtd: blktrans: fix a race vs kthread_stop
authorMaxim Levitsky <maximlevitsky@gmail.com>
Fri, 15 Oct 2010 15:20:45 +0000 (17:20 +0200)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 25 Oct 2010 00:28:52 +0000 (01:28 +0100)
There is small race window that could make kthread_stop hang forever.
I found that while hacking the IR subsystem.

Signed-off-by: Maxim Levitsky <maximlevisky@gmail.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/mtd_blkdevs.c

index 040c2d923807359a508633147dd5d6a007da38ad..a919587ed4811d7a7d1de4cf6034bc5446d68bf4 100644 (file)
@@ -133,6 +133,10 @@ static int mtd_blktrans_thread(void *arg)
 
                if (!req && !(req = blk_fetch_request(rq))) {
                        set_current_state(TASK_INTERRUPTIBLE);
+
+                       if (kthread_should_stop())
+                               set_current_state(TASK_RUNNING);
+
                        spin_unlock_irq(rq->queue_lock);
                        schedule();
                        spin_lock_irq(rq->queue_lock);