[U-Boot] UBI: regression since "mtd: ubi: Fix worker handling"
Patrice CHOTARD
patrice.chotard at st.com
Mon May 21 13:38:57 UTC 2018
Hi Richard, Heiko
Since f82290afc847 ("mtd: ubi: Fix worker handling"),
when booting from NAND, on a fresh NAND just after being flashed (and
only in this case), we got the following log:
ubi0: default fastmap pool size: 200
ubi0: default fastmap WL pool size: 100
ubi0: attaching mtd2
ubi0: scanning is finished
ubi0 error: ubi_update_fastmap: could not find any anchor PEB
ubi0 error: ubi_update_fastmap: could not find any anchor PEB
ubi0 error: ubi_wl_get_peb: Unable to get a free PEB from user WL pool
ubi0 error: autoresize: cannot auto-resize volume 1
UBI error: cannot attach mtd2UBI error: cannot initialize UBI, error
-28UBI init error 28
After analysis, in ubi_wl_init(), when performing schedule_erase(),
thread_enabled flag is not yet set to 1, which forbids ubi_do_worker()
to execute pending works.
This has to effect to not populate ubi->free with free physical
eraseblocks.
As temporary workaround i did the following update on my side which fix
this issue, but i don't consider it neither as a clean patch nor certain
that it is enough :
@@ -1560,15 +1560,17 @@ int ubi_wl_init(struct ubi_device *ubi, struct
ubi_attach_info *ai)
goto out_free;
e->pnum = aeb->pnum;
e->ec = aeb->ec;
ubi->lookuptbl[e->pnum] = e;
+ ubi->thread_enabled = 1;
if (schedule_erase(ubi, e, aeb->vol_id, aeb->lnum, 0)) {
+ ubi->thread_enabled = 0;
wl_entry_destroy(ubi, e);
goto out_free;
}
+ ubi->thread_enabled = 0;
found_pebs++;
}
list_for_each_entry(aeb, &ai->free, u.list) {
Regards
Patrice
More information about the U-Boot
mailing list