[OpenWrt-Devel] [PATCH] [Resend] [kernel] mtd-partial_eraseblock_erase in all kernels folded into original patch

Maciej Skrzypek maciej.skrzypek at flytronic.pl
Wed Jul 16 05:43:33 EDT 2014


mtd: allow partial block erase
This fixes error erasing partial mtd partition which does not start on
eraseblock boundary and allows using fconfig to configure redboot on
devices such as the Gateworks Cambria.

fixed in all kernels and folded in initial mtd-partial_eraseblock_write.patch

Maciej Skrzypek
Flytronic

Signed-off-by: Maciej Skrzypek <maciej.skrzypek at flytronic.pl>
---
 linux/generic/patches-3.10/411-mtd-partial_eraseblock_write.patch |    7 ++++---
 linux/generic/patches-3.13/411-mtd-partial_eraseblock_write.patch |    7 ++++---
 linux/generic/patches-3.14/411-mtd-partial_eraseblock_write.patch |    7 ++++---
 linux/generic/patches-3.3/401-partial_eraseblock_write.patch      |    7 ++++---
 linux/generic/patches-3.6/401-partial_eraseblock_write.patch      |    7 ++++---
 linux/generic/patches-3.8/401-partial_eraseblock_write.patch      |    7 ++++---
 linux/generic/patches-3.9/401-partial_eraseblock_write.patch      |    7 ++++---
 7 files changed, 28 insertions(+), 21 deletions(-)

Index: target/linux/generic/patches-3.10/411-mtd-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.10/411-mtd-partial_eraseblock_write.patch    (revision 41670)
+++ target/linux/generic/patches-3.10/411-mtd-partial_eraseblock_write.patch    (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -231,13 +233,60 @@ static int part_erase(struct mtd_info *m
+@@ -231,13 +233,61 @@ static int part_erase(struct mtd_info *m
        struct mtd_part *part = PART(mtd);
        int ret;
  
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -245,7 +294,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -245,7 +295,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->_erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -503,18 +570,24 @@ static struct mtd_part *allocate_partiti
+@@ -503,18 +571,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
Index: target/linux/generic/patches-3.13/411-mtd-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.13/411-mtd-partial_eraseblock_write.patch    (revision 41670)
+++ target/linux/generic/patches-3.13/411-mtd-partial_eraseblock_write.patch    (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -231,13 +233,60 @@ static int part_erase(struct mtd_info *m
+@@ -231,13 +233,61 @@ static int part_erase(struct mtd_info *m
        struct mtd_part *part = PART(mtd);
        int ret;
  
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -245,7 +294,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -245,7 +295,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->_erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -503,18 +570,24 @@ static struct mtd_part *allocate_partiti
+@@ -503,18 +571,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
Index: target/linux/generic/patches-3.14/411-mtd-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.14/411-mtd-partial_eraseblock_write.patch    (revision 41670)
+++ target/linux/generic/patches-3.14/411-mtd-partial_eraseblock_write.patch    (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -231,13 +233,60 @@ static int part_erase(struct mtd_info *m
+@@ -231,13 +233,61 @@ static int part_erase(struct mtd_info *m
        struct mtd_part *part = PART(mtd);
        int ret;
  
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -245,7 +294,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -245,7 +295,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->_erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -503,18 +570,24 @@ static struct mtd_part *allocate_partiti
+@@ -503,18 +571,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
Index: target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch (revision 41670)
+++ target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -252,13 +254,60 @@ static int part_erase(struct mtd_info *m
+@@ -252,13 +254,61 @@ static int part_erase(struct mtd_info *m
                return -EROFS;
        if (instr->addr >= mtd->size)
                return -EINVAL;
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -266,7 +315,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -266,7 +316,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -537,18 +604,24 @@ static struct mtd_part *allocate_partiti
+@@ -537,18 +605,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
Index: target/linux/generic/patches-3.6/401-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.6/401-partial_eraseblock_write.patch (revision 41670)
+++ target/linux/generic/patches-3.6/401-partial_eraseblock_write.patch (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -230,13 +232,60 @@ static int part_erase(struct mtd_info *m
+@@ -230,13 +232,61 @@ static int part_erase(struct mtd_info *m
        struct mtd_part *part = PART(mtd);
        int ret;
  
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -244,7 +293,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -244,7 +294,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->_erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -504,18 +571,24 @@ static struct mtd_part *allocate_partiti
+@@ -504,18 +572,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
Index: target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch (revision 41670)
+++ target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -230,13 +232,60 @@ static int part_erase(struct mtd_info *m
+@@ -230,13 +232,61 @@ static int part_erase(struct mtd_info *m
        struct mtd_part *part = PART(mtd);
        int ret;
  
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -244,7 +293,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -244,7 +294,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->_erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -504,18 +571,24 @@ static struct mtd_part *allocate_partiti
+@@ -504,18 +572,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
Index: target/linux/generic/patches-3.9/401-partial_eraseblock_write.patch
===================================================================
--- target/linux/generic/patches-3.9/401-partial_eraseblock_write.patch (revision 41670)
+++ target/linux/generic/patches-3.9/401-partial_eraseblock_write.patch (working copy)
@@ -9,7 +9,7 @@
  /* Our partition linked list */
  static LIST_HEAD(mtd_partitions);
  static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -230,13 +232,60 @@ static int part_erase(struct mtd_info *m
+@@ -230,13 +232,61 @@ static int part_erase(struct mtd_info *m
        struct mtd_part *part = PART(mtd);
        int ret;
  
@@ -33,6 +33,7 @@
 +                              part->master->erasesize,
 +                              &readlen, instr->erase_buf);
 +
++                      instr->len += instr->erase_buf_ofs;
 +                      instr->partial_start = true;
 +              } else {
 +                      mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
        return ret;
  }
  
-@@ -244,7 +293,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -244,7 +294,25 @@ void mtd_erase_callback(struct erase_inf
  {
        if (instr->mtd->_erase == part_erase) {
                struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
                if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
                        instr->fail_addr -= part->offset;
                instr->addr -= part->offset;
-@@ -504,18 +571,24 @@ static struct mtd_part *allocate_partiti
+@@ -504,18 +572,24 @@ static struct mtd_part *allocate_partiti
        if ((slave->mtd.flags & MTD_WRITEABLE) &&
            mtd_mod_by_eb(slave->offset, &slave->mtd)) {
                /* Doesn't start on a boundary of major erase size */
--



-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 538 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20140716/aadc890a/attachment.sig>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list