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

From: Zhihao Cheng
Date: Wed Oct 09 2024 - 06:46:59 EST


在 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?


After reviewing the TNC related code, I cannot find out any illegal behaviors to make znode lost or valid index LEB erased.

Hi Benedikt, could you provide a corrupted UBIFS image? Let me try getting more information.