diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-07-18 14:36:38 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-07-18 14:36:38 +0000 |
commit | 1d232f354a9194a7c3a56beaa3346482cc097f80 (patch) | |
tree | d549e21f1a310d7234c52bba49ee9a19a4126853 /target/linux/generic/patches-3.3 | |
parent | 51fbfde474136a5b442f53e6fc1bcd6f93e1cddb (diff) | |
download | upstream-1d232f354a9194a7c3a56beaa3346482cc097f80.tar.gz upstream-1d232f354a9194a7c3a56beaa3346482cc097f80.tar.bz2 upstream-1d232f354a9194a7c3a56beaa3346482cc097f80.zip |
kernel: 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.
Signed-off-by: Maciej Skrzypek <maciej.skrzypek@flytronic.pl>
SVN-Revision: 41733
Diffstat (limited to 'target/linux/generic/patches-3.3')
-rw-r--r-- | target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch b/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch index 3b22cfcb25..f9c1c5ea6d 100644 --- a/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch +++ b/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch @@ -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 */ |