[MTD] [OneNAND] Avoid deadlock in erase callback; release chip lock first.
authorAdrian Hunter <ext-adrian.hunter@nokia.com>
Fri, 12 Oct 2007 07:34:01 +0000 (10:34 +0300)
committerDavid Woodhouse <dwmw2@infradead.org>
Sun, 14 Oct 2007 12:37:53 +0000 (13:37 +0100)
When the erase callback performs some other action on the flash, it's
highly likely to deadlock unless we actually release the chip lock
before calling it.

This patch mirrors that same change already done for NAND.

Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
drivers/mtd/onenand/onenand_base.c

index a8c426bf47a41e4cd7f6f7969dc96e89c0b90b78..dd2835569092f5d403b7522271b950e146cbba71 100644 (file)
@@ -1711,13 +1711,14 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr)
 erase_exit:
 
        ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
-       /* Do call back function */
-       if (!ret)
-               mtd_erase_callback(instr);
 
        /* Deselect and wake up anyone waiting on the device */
        onenand_release_device(mtd);
 
+       /* Do call back function */
+       if (!ret)
+               mtd_erase_callback(instr);
+
        return ret;
 }