aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyril Bur <cyril.bur@au1.ibm.com>2018-02-27 16:31:39 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2018-02-28 20:28:28 -0600
commit682e196627a062731dc2596276013f2e9fa9f6db (patch)
tree7ac840a1f06b7b41120ccd4edf2e82536b9b407b
parentf24db9e5c8c481bab13bb9739d48c46af00f9f6b (diff)
downloadskiboot-682e196627a062731dc2596276013f2e9fa9f6db.zip
skiboot-682e196627a062731dc2596276013f2e9fa9f6db.tar.gz
skiboot-682e196627a062731dc2596276013f2e9fa9f6db.tar.bz2
libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()
If blocklevel_smart_erase() detects that the smart erase fits entire in one erase block, it has an early bail path. In this path it miscaculates where in the buffer the backend needs to read from to perform the final write. Fixes: d6a5b53f ("libflash/blocklevel: Add blocklevel_smart_erase()") Fixes: https://github.com/open-power/skiboot/issues/151 Reported-by: Pridhiviraj Paidipeddi <ppaidipe@linux.vnet.ibm.com> Tested-by: Pridhiviraj Paidipeddi <ppaidipe@linux.vnet.ibm.com> Signed-off-by: Cyril Bur <cyril.bur@au1.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r--libflash/blocklevel.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libflash/blocklevel.c b/libflash/blocklevel.c
index eaab431..809d33c 100644
--- a/libflash/blocklevel.c
+++ b/libflash/blocklevel.c
@@ -348,7 +348,7 @@ int blocklevel_smart_erase(struct blocklevel_device *bl, uint64_t pos, uint64_t
* so we need to write back the chunk at the end of the block
*/
if (base_pos + base_len + len < base_pos + block_size) {
- rc = bl->write(bl, pos + len, erase_buf + pos + len,
+ rc = bl->write(bl, pos + len, erase_buf + base_len + len,
block_size - base_len - len);
FL_DBG("%s: Early exit, everything was in one erase block\n",
__func__);