Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

UBI: amend NOR flash pre-erase quirk

In case of NOR flash, UBI zeroes EC and VID headers' magic,
in order to detect interrupted erasures. It first zeroes out
the EC magic, then VID magic. However, if a power cut happens
in between, we'll end up with a corrupted EC header and a valid
VID header, in which case UBI accepts the PEB, but prints a
warning. This patch makes sure we first zero out the VID
magic, then the EC magic, not vice versa. This is just a
small amendment to prevent warning messages.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>

+10 -10
+10 -10
drivers/mtd/ubi/io.c
··· 480 480 loff_t addr; 481 481 uint32_t data = 0; 482 482 483 - addr = (loff_t)pnum * ubi->peb_size; 484 - err = ubi->mtd->write(ubi->mtd, addr, 4, &written, (void *)&data); 485 - if (err) { 486 - ubi_err("error %d while writing 4 bytes to PEB %d:%d, written " 487 - "%zd bytes", err, pnum, 0, written); 488 - ubi_dbg_dump_stack(); 489 - return err; 490 - } 491 - 492 - addr += ubi->vid_hdr_aloffset; 483 + addr = (loff_t)pnum * ubi->peb_size + ubi->vid_hdr_aloffset; 493 484 err = ubi->mtd->write(ubi->mtd, addr, 4, &written, (void *)&data); 494 485 if (err) { 495 486 ubi_err("error %d while writing 4 bytes to PEB %d:%d, written " 496 487 "%zd bytes", err, pnum, ubi->vid_hdr_aloffset, written); 488 + ubi_dbg_dump_stack(); 489 + return err; 490 + } 491 + 492 + addr -= ubi->vid_hdr_aloffset; 493 + err = ubi->mtd->write(ubi->mtd, addr, 4, &written, (void *)&data); 494 + if (err) { 495 + ubi_err("error %d while writing 4 bytes to PEB %d:%d, written " 496 + "%zd bytes", err, pnum, 0, written); 497 497 ubi_dbg_dump_stack(); 498 498 return err; 499 499 }