From: Miquel Raynal <miquel.raynal@bootlin.com>
To: "Driesen Jef (JDI)" <Jef.Driesen@niko.eu>
Cc: richard@nod.at,
"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>
Subject: Re: ubifs: mounting fails due to error in orphan file handling
Date: Wed, 5 Feb 2020 09:22:02 +0100 [thread overview]
Message-ID: <20200205092202.5f0929c3@xps13> (raw)
In-Reply-To: <0d3a2ed9-8ff0-7030-a8c6-c5a204eb6b5b@niko.eu>
Hi Jef,
"Driesen Jef (JDI)" <Jef.Driesen@niko.eu> wrote on Tue, 28
Jan 2020 10:51:39 +0000:
> Hi,
>
> We're experiencing some kind of file system corruption with the UBIFS
> file system after power cuts. The problem shows up as an error during mount:
>
> # mount -t ubifs ubi0:home /home
> mount: /home: special device ubi0:home does not exist.
>
> The underlying UBI volumes are all fine:
>
> # mtdinfo /dev/mtd0
> mtd0
> Name: ubi
> Type: nand
> Eraseblock size: 131072 bytes, 128.0 KiB
> Amount of eraseblocks: 8192 (1073741824 bytes, 1024.0 MiB)
> Minimum input/output unit size: 2048 bytes
> Sub-page size: 2048 bytes
> OOB size: 64 bytes
> Character device major/minor: 90:0
> Bad blocks are allowed: true
> Device is writable: true
>
> # ubinfo -a
> UBI version: 1
> Count of UBI devices: 1
> UBI control device major/minor: 10:58
> Present UBI devices: ubi0
>
> ubi0
> Volumes count: 3
> Logical eraseblock size: 126976 bytes, 124.0 KiB
> Total amount of logical eraseblocks: 8192 (1040187392 bytes, 992.0 MiB)
> Amount of available logical eraseblocks: 0 (0 bytes)
> Maximum count of volumes 128
> Count of bad physical eraseblocks: 0
> Count of reserved physical eraseblocks: 160
> Current maximum erase counter value: 36
> Minimum input/output unit size: 2048 bytes
> Character device major/minor: 246:0
> Present volumes: 0, 1, 2
>
> Volume ID: 0 (on ubi0)
> Type: dynamic
> Alignment: 1
> Size: 2676 LEBs (339787776 bytes, 324.0 MiB)
> State: OK
> Name: rfs2
> Character device major/minor: 246:1
> -----------------------------------
> Volume ID: 1 (on ubi0)
> Type: dynamic
> Alignment: 1
> Size: 2676 LEBs (339787776 bytes, 324.0 MiB)
> State: OK
> Name: rfs3
> Character device major/minor: 246:2
> -----------------------------------
> Volume ID: 2 (on ubi0)
> Type: dynamic
> Alignment: 1
> Size: 2674 LEBs (339533824 bytes, 323.8 MiB)
> State: OK
> Name: home
> Character device major/minor: 246:3
>
>
> I already debugged the ubifs kernel module to locate where exactly the
> error is returned, and the call chain is:
>
> ubifs_mount -> ubifs_fill_super -> mount_ubifs -> ubifs_mount_orphans →
> kill_orphans -> do_kill_orphans -> ubifs_tnc_lookup -> ubifs_tnc_locate
>
> The ubifs_tnc_locate function fails with -ENOENT because the
> ubifs_lookup_level0 function returns 0.
>
> If I patch the mount_ubifs function to call ubifs_mount_orphans with
> zero for the unclean parameter (instead of the value of
> c->need_recovery), then the mounting succeeds. Afterwards, when
> rebooting once more with the original unpatched kernel, the file system
> appears to be fixed again, and mounting succeeds.
>
> I'm not really sure what's going on under the hood, but it looks like a
> problem with the handling of the orphan files. With this knowledge, we
> are now able to reproduce the problem reliable, by doing a power cut
> while running the attached script. The scripts creates many files in a
> loop, keeps them all open and removes them again. With this approach we
> hit the problem about once every two attempts.
>
> The problem appeared for the first time after we switched from kernel
> v4.7 to v5.3. I tried with v5.4 and master too, in case we are hitting a
> problem that is already fixed, but they show the same problem. After
> doing some bisecting, this commit appears to have introduced the problem:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/ubifs/orphan.c?id=ee1438ce5dc4d67dd8dd1ff51583122a61f5bd9e
>
> How can we fix this?
Just adding Richard into the loop, he is not available right now but
will probably be interested by this issue. On my side, I have no clue :)
Thanks,
Miquèl
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-02-05 8:22 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-28 10:51 ubifs: mounting fails due to error in orphan file handling Driesen Jef (JDI)
2020-02-05 8:22 ` Miquel Raynal [this message]
2020-02-05 15:25 ` Jef Driesen
2020-02-05 16:17 ` Steve deRosier
2020-02-07 10:18 ` Jef Driesen
2020-02-07 11:04 ` Richard Weinberger
2020-02-11 13:47 ` Jef Driesen
2020-02-27 7:55 ` Richard Weinberger
2020-02-27 8:42 ` Jef Driesen
2020-02-27 8:51 ` Miquel Raynal
2020-02-27 9:07 ` Jef Driesen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200205092202.5f0929c3@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=Jef.Driesen@niko.eu \
--cc=linux-mtd@lists.infradead.org \
--cc=richard@nod.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.