UBI: compatible fallback in absense of sequence numbers

Fall back onto thinking everything's OK if either of the sequence
numbers we are asked to compare is zero, which is what was used
before sequence numbers were introduced.

[ Artem: modified the patch to be applicable to upstream UBI, added
big comment ]

Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
Signed-off-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>

authored by Adrian Hunter and committed by Artem Bityutskiy 32bc4820 7194e6f9

+12 -1
+12 -1
drivers/mtd/ubi/scan.c
··· 781 return -EINVAL; 782 } 783 784 image_seq = be32_to_cpu(ech->image_seq); 785 if (!si->image_seq_set) { 786 ubi->image_seq = image_seq; 787 si->image_seq_set = 1; 788 - } else if (ubi->image_seq != image_seq) { 789 ubi_err("bad image sequence number %d in PEB %d, " 790 "expected %d", image_seq, pnum, ubi->image_seq); 791 ubi_dbg_dump_ec_hdr(ech);
··· 781 return -EINVAL; 782 } 783 784 + /* 785 + * Make sure that all PEBs have the same image sequence number. 786 + * This allows us to detect situations when users flash UBI 787 + * images incorrectly, so that the flash has the new UBI image 788 + * and leftovers from the old one. This feature was added 789 + * relatively recently, and the sequence number was always 790 + * zero, because old UBI implementations always set it to zero. 791 + * For this reasons, we do not panic if some PEBs have zero 792 + * sequence number, while other PEBs have non-zero sequence 793 + * number. 794 + */ 795 image_seq = be32_to_cpu(ech->image_seq); 796 if (!si->image_seq_set) { 797 ubi->image_seq = image_seq; 798 si->image_seq_set = 1; 799 + } else if (ubi->image_seq && ubi->image_seq != image_seq) { 800 ubi_err("bad image sequence number %d in PEB %d, " 801 "expected %d", image_seq, pnum, ubi->image_seq); 802 ubi_dbg_dump_ec_hdr(ech);