forked from freifunk-franken/firmware
54 lines
2.0 KiB
Diff
54 lines
2.0 KiB
Diff
|
From ab8d25d5ac1b307dacdc3e5e44e23248f4b9a018 Mon Sep 17 00:00:00 2001
|
||
|
From: Serhii Serhieiev <adron@mstnt.com>
|
||
|
Date: Wed, 9 Feb 2022 09:07:57 +0200
|
||
|
Subject: [PATCH 01/18] generic: fix mikrotik/rb_softconfig work(crc mismatch)
|
||
|
with 64K block size
|
||
|
|
||
|
Signed-off-by: Serhii Serhieiev <adron@mstnt.com>
|
||
|
---
|
||
|
.../files/drivers/platform/mikrotik/rb_softconfig.c | 7 ++++---
|
||
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c b/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c
|
||
|
index 5acff6aa91..2332089a46 100644
|
||
|
--- a/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c
|
||
|
+++ b/target/linux/generic/files/drivers/platform/mikrotik/rb_softconfig.c
|
||
|
@@ -58,6 +58,7 @@
|
||
|
|
||
|
#define RB_SOFTCONFIG_VER "0.05"
|
||
|
#define RB_SC_PR_PFX "[rb_softconfig] "
|
||
|
+#define SOFT_CONF_FIXED_SIZE 0x1000
|
||
|
|
||
|
#define RB_SC_HAS_WRITE_SUPPORT true
|
||
|
#define RB_SC_WMODE S_IWUSR
|
||
|
@@ -636,7 +637,7 @@ static ssize_t sc_commit_store(struct kobject *kobj, struct kobj_attribute *attr
|
||
|
|
||
|
write_lock(&sc_bufrwl);
|
||
|
if (!flush) // reread
|
||
|
- ret = mtd_read(mtd, 0, mtd->size, &bytes_rw, sc_buf);
|
||
|
+ ret = mtd_read(mtd, 0, sc_buflen, &bytes_rw, sc_buf);
|
||
|
else { // crc32 + commit
|
||
|
/*
|
||
|
* CRC32 is computed on the entire buffer, excluding the CRC
|
||
|
@@ -658,7 +659,7 @@ static ssize_t sc_commit_store(struct kobject *kobj, struct kobj_attribute *attr
|
||
|
ei.len = mtd->size;
|
||
|
ret = mtd_erase(mtd, &ei);
|
||
|
if (!ret)
|
||
|
- ret = mtd_write(mtd, 0, mtd->size, &bytes_rw, sc_buf);
|
||
|
+ ret = mtd_write(mtd, 0, sc_buflen, &bytes_rw, sc_buf);
|
||
|
|
||
|
/*
|
||
|
* Handling mtd_write() failure here is a tricky situation. The
|
||
|
@@ -708,7 +709,7 @@ int rb_softconfig_init(struct kobject *rb_kobj, struct mtd_info *mtd)
|
||
|
if (ret)
|
||
|
return -ENODEV;
|
||
|
|
||
|
- sc_buflen = mtd->size;
|
||
|
+ sc_buflen = mtd->size > SOFT_CONF_FIXED_SIZE ? SOFT_CONF_FIXED_SIZE : mtd->size;
|
||
|
sc_buf = kmalloc(sc_buflen, GFP_KERNEL);
|
||
|
if (!sc_buf) {
|
||
|
__put_mtd_device(mtd);
|
||
|
--
|
||
|
2.42.1
|
||
|
|