mtd: Stop assuming mtd_erase() is asynchronous
None of the mtd->_erase() implementations work in an asynchronous manner, so let's simplify MTD users that call mtd_erase(). All they need to do is check the value returned by mtd_erase() and assume that != 0 means failure. Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Reviewed-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
@@ -140,12 +140,6 @@ typedef struct partition_t {
|
||||
#define XFER_PREPARED 0x03
|
||||
#define XFER_FAILED 0x04
|
||||
|
||||
/*====================================================================*/
|
||||
|
||||
|
||||
static void ftl_erase_callback(struct erase_info *done);
|
||||
|
||||
|
||||
/*======================================================================
|
||||
|
||||
Scan_header() checks to see if a memory region contains an FTL
|
||||
@@ -349,17 +343,19 @@ static int erase_xfer(partition_t *part,
|
||||
return -ENOMEM;
|
||||
|
||||
erase->mtd = part->mbd.mtd;
|
||||
erase->callback = ftl_erase_callback;
|
||||
erase->addr = xfer->Offset;
|
||||
erase->len = 1 << part->header.EraseUnitSize;
|
||||
erase->priv = (u_long)part;
|
||||
|
||||
ret = mtd_erase(part->mbd.mtd, erase);
|
||||
if (!ret) {
|
||||
xfer->state = XFER_ERASED;
|
||||
xfer->EraseCount++;
|
||||
} else {
|
||||
xfer->state = XFER_FAILED;
|
||||
pr_notice("ftl_cs: erase failed: err = %d\n", ret);
|
||||
}
|
||||
|
||||
if (!ret)
|
||||
xfer->EraseCount++;
|
||||
else
|
||||
kfree(erase);
|
||||
kfree(erase);
|
||||
|
||||
return ret;
|
||||
} /* erase_xfer */
|
||||
@@ -371,37 +367,6 @@ static int erase_xfer(partition_t *part,
|
||||
|
||||
======================================================================*/
|
||||
|
||||
static void ftl_erase_callback(struct erase_info *erase)
|
||||
{
|
||||
partition_t *part;
|
||||
struct xfer_info_t *xfer;
|
||||
int i;
|
||||
|
||||
/* Look up the transfer unit */
|
||||
part = (partition_t *)(erase->priv);
|
||||
|
||||
for (i = 0; i < part->header.NumTransferUnits; i++)
|
||||
if (part->XferInfo[i].Offset == erase->addr) break;
|
||||
|
||||
if (i == part->header.NumTransferUnits) {
|
||||
printk(KERN_NOTICE "ftl_cs: internal error: "
|
||||
"erase lookup failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
xfer = &part->XferInfo[i];
|
||||
if (erase->state == MTD_ERASE_DONE)
|
||||
xfer->state = XFER_ERASED;
|
||||
else {
|
||||
xfer->state = XFER_FAILED;
|
||||
printk(KERN_NOTICE "ftl_cs: erase failed: state = %d\n",
|
||||
erase->state);
|
||||
}
|
||||
|
||||
kfree(erase);
|
||||
|
||||
} /* ftl_erase_callback */
|
||||
|
||||
static int prepare_xfer(partition_t *part, int i)
|
||||
{
|
||||
erase_unit_header_t header;
|
||||
|
Reference in New Issue
Block a user