[Skiboot] [PATCH] libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()

Cyril Bur cyril.bur at au1.ibm.com
Tue Feb 27 16:31:39 AEDT 2018


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 at linux.vnet.ibm.com>
Tested-by: Pridhiviraj Paidipeddi <ppaidipe at linux.vnet.ibm.com>
Signed-off-by: Cyril Bur <cyril.bur at au1.ibm.com>
---
 libflash/blocklevel.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libflash/blocklevel.c b/libflash/blocklevel.c
index eaab431a..809d33cb 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__);
-- 
2.16.2



More information about the Skiboot mailing list