Erase race?

Artem Bityutskiy dedekind1 at gmail.com
Tue Apr 20 19:04:00 EDT 2010


On Tue, 2010-04-13 at 16:15 -0400, Jon Ringle wrote:
> Hi,
> I have a few machines that have UBI and UBIFS on NOR flash that are
> undergoing continuous reboot testing.
> One of them just caught the following failure:
> 
> [   51.250000] IXP4XX-Flash.0: buffer write error (status 0xd0)
> [   51.250000] UBI error: ubi_io_write: error -22 while writing 64
> bytes to PEB 226:0, written 0 bytes
> [   51.270000] UBI error: erase_worker: failed to erase PEB 226, error -22
> [   51.270000] UBI warning: ubi_ro_mode: switch to read-only mode
> [   51.290000] UBI error: do_work: work failed with error code -22
> [   51.290000] UBI error: ubi_thread: ubi_bgt0d: work failed with error code -22
> 
> Looking at this it appears that the failure might have been caused due
> to the erase_worker and ubi_io_write occurring out of order... since
> it looks like ubi_io_write was trying to write at offset 0 of the PEB,
> which I imagine would have to be the EC header, which should happen
> after the block is erased. But it doesn't seem to be the case here.

I'm out of office and have a long queue of unanswered mails, so please,
do not wait for help from me soon, and just debug this.

The erase_worker function writes the EC header after the eraseblock is
erased. IOW, I think erase_worker calls ubi_io_write, which fails with
-EINVAL for some reasons, and you see these prints. So this does not
look like a race, at least not an UBI race. If you had UBI debugging
enabled (which is a good idea), you'd have few more info and a stackdump
printed.

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)




More information about the linux-mtd mailing list