Re: [PATCH 1/1] ubifs: Try to recover from missing znode

Zhihao Cheng
2024-10-10T02:30:38Z

在 2024/10/9 20:49, Benedikt Spranger 写道:
> On Wed, 9 Oct 2024 18:46:43 +0800
> Zhihao Cheng <chengzhihao1@huawei.com> wrote:
>
>> 在 2024/10/9 14:03, Richard Weinberger 写道:
>>> ----- Ursprüngliche Mail -----
>>>> Von: "chengzhihao1" <chengzhihao1@huawei.com>
>>>> An: "Benedikt Spranger" <b.spranger@linutronix.de>, "linux-kernel"
>>>> <linux-kernel@vger.kernel.org> CC: "linux-mtd"
>>>> <linux-mtd@lists.infradead.org>, "richard" <richard@nod.at>
>>>> Gesendet: Mittwoch, 9. Oktober 2024 04:23:02 Betreff: Re: [PATCH
>>>> 1/1] ubifs: Try to recover from missing znode
>>>
>>>> 在 2024/10/8 21:33, Benedikt Spranger 写道:
>>>>> After powercut on a system using ubifs mounting failed:
>>>>>
>>>>> 2024-09-30T12:38:26.880487+02:00 sonja kernel: UBIFS error
>>>>> (ubi0:0 pid 2178): ubifs_read_node [ubifs]: bad node type (255
>>>>> but expected 9) 2024-09-30T12:38:26.880506+02:00 sonja kernel:
>>>>> UBIFS error (ubi0:0 pid 2178): ubifs_read_node [ubifs]: bad node
>>>>> at LEB 103:46920, LEB mapping status 0
>>>>> 2024-09-30T12:38:26.880509+02:00 sonja kernel: Not a node, first
>>>>> 24 bytes: 2024-09-30T12:38:26.880510+02:00 sonja kernel:
>>>>> 00000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>>>>> ff ff ff ff ff ff ........................
>>>>>
>>>>> While traversing over zbranches during the journal replay one
>>>>> zbranch points to a znode, which was not written to the flash and
>>>>> therefore the flash is empty.
>>>>
>>>> UBIFS guarantees two things for znodes:
>>>> 1) all index nodes(in commit seq N) are written on flash before
>>>> master nodes(for commit seq N) are written.
>>>> 2) all index nodes(in commit seq N) won't be erased from flash
>>>> before master nodes(for commit seq N+1) are written.
>>>> So, I don't understand that why znodes not exist during journal
>>>> replaying?
>>>
>>> In addition to that, is just one znode missing or are larger parts
>>> of the flash empty?
>
> Some background:
> The system producing the broken image runs on an older kernel version
> (4.9.286-rt189). Attaching UBI performs without any error. It seems,
> that there is only one znode missing. There are empty parts on the
> flash, but as far as I can see all PEBs have UBI header Information.
> The missing znode is somewhere in th middle of an PEB and other znodes
> are in that PEB.
>
>> After reviewing the TNC related code, I cannot find out any illegal
>> behaviors to make znode lost or valid index LEB erased.
> OK. Is it possible, that this behaviour is caused by a already fixed
> bug? This happend on a system running 4.9.286-rt189.

I found one patch [1], which fixes a data lost problem while writing failed.

[1]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v6.12-rc2&id=31a149d5c13c4cbcf97de3435817263a2d8c9d6e
>
>> Hi Benedikt, could you provide a corrupted UBIFS image? Let me try
>> getting more information.
> I need to clarify this.
>
> Regards
> Benedikt Spranger
> .