aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-07-18 14:36:38 +0000
committerFelix Fietkau <nbd@openwrt.org>2014-07-18 14:36:38 +0000
commitb045adea9eec6668f23dd6874439d197768c1dfd (patch)
tree9a844ed4b2349a0a7078ddd0b03de79cc4ddd839 /target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch
parent872325fe930b2d35a1716224ed101c7a878d1961 (diff)
downloadupstream-b045adea9eec6668f23dd6874439d197768c1dfd.tar.gz
upstream-b045adea9eec6668f23dd6874439d197768c1dfd.tar.bz2
upstream-b045adea9eec6668f23dd6874439d197768c1dfd.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> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@41733 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch')
-rw-r--r--target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch7
1 files changed, 4 insertions, 3 deletions
diff --git a/target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch b/target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch
index f2fa3676fb..f367e1e9f6 100644
--- a/target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch
+++ b/target/linux/generic/patches-3.8/401-partial_eraseblock_write.patch
@@ -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 */