mtd: spi-nor: fix error handling in spi_nor_erase
authorHeiner Kallweit <hkallweit1@gmail.com>
Tue, 17 Nov 2015 19:18:54 +0000 (20:18 +0100)
committerBrian Norris <computersforpeace@gmail.com>
Fri, 4 Dec 2015 23:38:47 +0000 (15:38 -0800)
The documenting comment of mtd_erase in mtdcore.c states:
Device drivers are supposed to call instr->callback() whenever
the operation completes, even if it completes with a failure.

Currently the callback isn't called in case of failure. Fix this.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/spi-nor/spi-nor.c

index f8a9b77aac7680f2e221f6b9054f7c94a2802718..3b2460efc0199ffe9d97397c4892d455bfd01866 100644 (file)
@@ -410,17 +410,13 @@ static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
 
        write_disable(nor);
 
+erase_err:
        spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE);
 
-       instr->state = MTD_ERASE_DONE;
+       instr->state = ret ? MTD_ERASE_FAILED : MTD_ERASE_DONE;
        mtd_erase_callback(instr);
 
        return ret;
-
-erase_err:
-       spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE);
-       instr->state = MTD_ERASE_FAILED;
-       return ret;
 }
 
 static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs,