[U-Boot] UBI: regression since "mtd: ubi: Fix worker handling"

Richard Weinberger richard at nod.at
Mon May 21 14:07:41 UTC 2018


Patrice,

Am Montag, 21. Mai 2018, 15:38:57 CEST schrieb Patrice CHOTARD:
> 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;

This is not correct. At this point the UBI thread is not ready.
I know, I know, U-Boot has no threads but some data structures might
not be ready.

Let me think how to work around this properly.

Thanks,
//richard


More information about the U-Boot mailing list