diff options
| author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2009-09-30 03:01:28 -0400 |
|---|---|---|
| committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2009-10-20 03:13:04 -0400 |
| commit | 2eadaad67b2b6bd132eda105128d2d466298b8e3 (patch) | |
| tree | 31ca1bf2d0b2500a0600deecb81cd5af5230d0f6 | |
| parent | 012abeea669ea49636cf952d13298bb68654146a (diff) | |
UBI: fix backward compatibility
Commit 32bc4820287a1a03982979515949e8ea56eac641 did not fully fix
the backward compatibility issues. We still fail to properly handle
situations when the first PEB contains non-zero image sequence
number, but one of the following PEBs contains zero image sequence
number. For example, this may happen if we mount a new image with
an old kernel, and then try to mount it in the new kernel.
This patch should fix the issue.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
| -rw-r--r-- | drivers/mtd/ubi/scan.c | 7 | ||||
| -rw-r--r-- | drivers/mtd/ubi/scan.h | 2 |
2 files changed, 3 insertions, 6 deletions
diff --git a/drivers/mtd/ubi/scan.c b/drivers/mtd/ubi/scan.c index e7161adc419d..90af61a2c3e4 100644 --- a/drivers/mtd/ubi/scan.c +++ b/drivers/mtd/ubi/scan.c | |||
| @@ -794,16 +794,15 @@ static int process_eb(struct ubi_device *ubi, struct ubi_scan_info *si, | |||
| 794 | * number. | 794 | * number. |
| 795 | */ | 795 | */ |
| 796 | image_seq = be32_to_cpu(ech->image_seq); | 796 | image_seq = be32_to_cpu(ech->image_seq); |
| 797 | if (!si->image_seq_set) { | 797 | if (!ubi->image_seq && image_seq) |
| 798 | ubi->image_seq = image_seq; | 798 | ubi->image_seq = image_seq; |
| 799 | si->image_seq_set = 1; | 799 | if (ubi->image_seq && image_seq && |
| 800 | } else if (ubi->image_seq && ubi->image_seq != image_seq) { | 800 | ubi->image_seq != image_seq) { |
| 801 | ubi_err("bad image sequence number %d in PEB %d, " | 801 | ubi_err("bad image sequence number %d in PEB %d, " |
| 802 | "expected %d", image_seq, pnum, ubi->image_seq); | 802 | "expected %d", image_seq, pnum, ubi->image_seq); |
| 803 | ubi_dbg_dump_ec_hdr(ech); | 803 | ubi_dbg_dump_ec_hdr(ech); |
| 804 | return -EINVAL; | 804 | return -EINVAL; |
| 805 | } | 805 | } |
| 806 | |||
| 807 | } | 806 | } |
| 808 | 807 | ||
| 809 | /* OK, we've done with the EC header, let's look at the VID header */ | 808 | /* OK, we've done with the EC header, let's look at the VID header */ |
diff --git a/drivers/mtd/ubi/scan.h b/drivers/mtd/ubi/scan.h index bab31695dace..ff179ad7ca55 100644 --- a/drivers/mtd/ubi/scan.h +++ b/drivers/mtd/ubi/scan.h | |||
| @@ -103,7 +103,6 @@ struct ubi_scan_volume { | |||
| 103 | * @ec_sum: a temporary variable used when calculating @mean_ec | 103 | * @ec_sum: a temporary variable used when calculating @mean_ec |
| 104 | * @ec_count: a temporary variable used when calculating @mean_ec | 104 | * @ec_count: a temporary variable used when calculating @mean_ec |
| 105 | * @corr_count: count of corrupted PEBs | 105 | * @corr_count: count of corrupted PEBs |
| 106 | * @image_seq_set: indicates @ubi->image_seq is known | ||
| 107 | * | 106 | * |
| 108 | * This data structure contains the result of scanning and may be used by other | 107 | * This data structure contains the result of scanning and may be used by other |
| 109 | * UBI sub-systems to build final UBI data structures, further error-recovery | 108 | * UBI sub-systems to build final UBI data structures, further error-recovery |
| @@ -127,7 +126,6 @@ struct ubi_scan_info { | |||
| 127 | uint64_t ec_sum; | 126 | uint64_t ec_sum; |
| 128 | int ec_count; | 127 | int ec_count; |
| 129 | int corr_count; | 128 | int corr_count; |
| 130 | int image_seq_set; | ||
| 131 | }; | 129 | }; |
| 132 | 130 | ||
| 133 | struct ubi_device; | 131 | struct ubi_device; |
