issue with ubi_wl_put_peb
Richard Weinberger
richard at nod.at
Wed Aug 24 13:48:29 PDT 2016
Nikhilesh Reddy,
On 23.08.2016 20:55, Nikhilesh Reddy wrote:
> Hi
>
>
> I am currently running into a hard to reproduce issue( takes upto a week to reproduce) with ubi_wl_put_peb.
>
> I would appreciate any help you can give me.
>
> In the following stack
> -000|__list_del_entry()
> -001|list_del()
> -002|prot_queue_del()
> -003|ubi_wl_put_peb()
> -004|ubi_eba_unmap_leb()
> -005|ubifs_leb_unmap()
> -006|ubifs_gc_start_commit()
> -007|do_commit()
> -008|run_bg_commit(inline)
> -008|ubifs_bg_thread()
> -009|kthread()
>
> This issue was seen with CONFIG_DEBUG_LIST=y
>
> What we see is that the wl entry that is being put is not in the protection queue but seems to be in free/used trees.
So, you trigger a list assert?
Please share the kernel log.
> In the code below:
> http://git.infradead.org/linux-ubifs.git/blob/HEAD:/drivers/mtd/ubi/wl.c#l1231
>
> We see that the the wl_entry is checked to be in used/scrub and erroneous trees .. and then it simply assumes that it is in the protection queue if it is not in any of the rb trees.
>
> There appears to be a race where the wl_entry is being put before it actually has a chance to be inserted into the protection queue.
>
> This seems to occur when ubi_io_write_vid_hdr takes long to write the VID header.
>
>
> I noticed that a check for a similar situation is http://git.infradead.org/linux-ubifs.git/blob/HEAD:/drivers/mtd/ubi/wl.c#l761
>
> Is the same check needed in the case of ubi_wl_put_peb as well?
>
> Can you please tell me if this sounds like a known issue?
>
> I am a little lost on when |ubi_eba_unmap_leb would be called before the PEB has a chance to be inserted into a another tree from the free tree.
>
> I would be grateful any pointers that you can give me so i can get to the root cause.
Hmmmm, is Fastmap involved?
Thanks,
//richard
More information about the linux-mtd
mailing list