| ubi_erase_worker_helper#(PNUM; WLARRAY, APEBS; ERR) {ERR := EIO; let TRIES = 0 in {while ERR ≠ ESUCCESS ∧ TRIES ≤ UBI_ERASE_RETRIES do {WLARRAY[PNUM].ec := WLARRAY[PNUM].ec + 1; aubi_io_sync_erase#(PNUM; APEBS; ERR); if ERR = ESUCCESS then aubi_io_write_echdr#(PNUM, aechdr(WLARRAY[PNUM].ec); APEBS; ERR) else debug#("ubi: erase of PEB " + PNUM.toString + " failed"); TRIES := TRIES + 1}; if ERR = ESUCCESS then WLARRAY[PNUM].status := free else {aubi_io_markbad#(PNUM; APEBS; ERR); if ERR = ESUCCESS then WLARRAY[PNUM].status := erroneous else debug#("ubi: marking PEB " + PNUM.toString + " as bad failed")}} } |