kernel: bump 4.9 to 4.9.161
[openwrt/openwrt.git] / target / linux / generic / pending-4.9 / 490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index 1436e486ddee54ad98003b94089ba71a0047181b..168cfe50ee4290f6df6f025167624de9d2c3bdfd 100644 (file)
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 
 --- a/drivers/mtd/ubi/build.c
 +++ b/drivers/mtd/ubi/build.c
-@@ -1226,6 +1226,54 @@ static struct mtd_info * __init open_mtd
+@@ -1226,6 +1226,73 @@ static struct mtd_info * __init open_mtd
        return mtd;
  }
  
@@ -20,6 +20,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 +{
 +      int err;
 +      struct mtd_info *mtd;
++      loff_t offset = 0;
 +      size_t len;
 +      char magic[4];
 +
@@ -31,9 +32,27 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 +      if (IS_ERR(mtd))
 +              return;
 +
-+      /* check for a valid ubi magic if read from flash was successful */
-+      err = mtd_read(mtd, 0, 4, &len, (void *) magic);
-+      if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
++      /* get the first not bad block */
++      if (mtd_can_have_bb(mtd))
++              while (mtd_block_isbad(mtd, offset)) {
++                      offset += mtd->erasesize;
++
++                      if (offset > mtd->size) {
++                              pr_err("UBI error: Failed to find a non-bad "
++                                     "block on mtd%d\n", mtd->index);
++                              goto cleanup;
++                      }
++              }
++
++      /* check if the read from flash was successful */
++      err = mtd_read(mtd, offset, 4, &len, (void *) magic);
++      if ((err && !mtd_is_bitflip(err)) || len != 4) {
++              pr_err("UBI error: unable to read from mtd%d\n", mtd->index);
++              goto cleanup;
++      }
++
++      /* check for a valid ubi magic */
++      if (strncmp(magic, "UBI#", 4)) {
 +              pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
 +              goto cleanup;
 +      }
@@ -63,7 +82,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  static int __init ubi_init(void)
  {
        int err, i, k;
-@@ -1309,6 +1357,12 @@ static int __init ubi_init(void)
+@@ -1309,6 +1376,12 @@ static int __init ubi_init(void)
                }
        }