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

From: Zhihao Cheng
Date: Wed Oct 09 2024 - 22:30:26 EST


在 2024/10/9 20:49, Benedikt Spranger 写道:
On Wed, 9 Oct 2024 18:46:43 +0800
Zhihao Cheng <chengzhihao1@xxxxxxxxxx> wrote:

在 2024/10/9 14:03, Richard Weinberger 写道:
----- Ursprüngliche Mail -----
Von: "chengzhihao1" <chengzhihao1@xxxxxxxxxx>
An: "Benedikt Spranger" <b.spranger@xxxxxxxxxxxxx>, "linux-kernel"
<linux-kernel@xxxxxxxxxxxxxxx> CC: "linux-mtd"
<linux-mtd@xxxxxxxxxxxxxxxxxxx>, "richard" <richard@xxxxxx>
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
.