hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/mtd/mtdblock.c
....@@ -153,7 +153,7 @@
153153 mtdblk->cache_state = STATE_EMPTY;
154154 ret = mtd_read(mtd, sect_start, sect_size,
155155 &retlen, mtdblk->cache_data);
156
- if (ret)
156
+ if (ret && !mtd_is_bitflip(ret))
157157 return ret;
158158 if (retlen != sect_size)
159159 return -EIO;
....@@ -188,8 +188,12 @@
188188 pr_debug("mtdblock: read on \"%s\" at 0x%lx, size 0x%x\n",
189189 mtd->name, pos, len);
190190
191
- if (!sect_size)
192
- return mtd_read(mtd, pos, len, &retlen, buf);
191
+ if (!sect_size) {
192
+ ret = mtd_read(mtd, pos, len, &retlen, buf);
193
+ if (ret && !mtd_is_bitflip(ret))
194
+ return ret;
195
+ return 0;
196
+ }
193197
194198 while (len > 0) {
195199 unsigned long sect_start = (pos/sect_size)*sect_size;
....@@ -209,7 +213,7 @@
209213 memcpy (buf, mtdblk->cache_data + offset, size);
210214 } else {
211215 ret = mtd_read(mtd, pos, size, &retlen, buf);
212
- if (ret)
216
+ if (ret && !mtd_is_bitflip(ret))
213217 return ret;
214218 if (retlen != size)
215219 return -EIO;