From mboxrd@z Thu Jan 1 00:00:00 1970 From: Patrice CHOTARD Date: Mon, 21 May 2018 13:38:57 +0000 Subject: [U-Boot] UBI: regression since "mtd: ubi: Fix worker handling" Message-ID: <0a34e4d0-7563-313f-ec09-e14ef8f27d58@st.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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