From 8a2df2a4580f2a0683ad4ee33511d7d79f323296 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 13 Jul 2016 04:11:08 -1000 Subject: [PATCH] Avoid unnecessary Write Cycle --- .../systemlib/flashparams/flashparams.c | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/modules/systemlib/flashparams/flashparams.c b/src/modules/systemlib/flashparams/flashparams.c index 623715b635..fa474dffdf 100644 --- a/src/modules/systemlib/flashparams/flashparams.c +++ b/src/modules/systemlib/flashparams/flashparams.c @@ -183,11 +183,25 @@ out: if (result == OK) { + /* Check for a write that has no changes */ + + uint8_t *was_buffer; + size_t was_buf_size; + int was_result = parameter_flashfs_read(parameters_token, &was_buffer, &was_buf_size); + void *enc_buff = bson_encoder_buf_data(&encoder); - memcpy(buffer, enc_buff, buf_size); + + bool commit = was_result < OK || was_buf_size != buf_size || 0 != memcmp(was_buffer, enc_buff, was_buf_size); + + if (commit) { + + memcpy(buffer, enc_buff, buf_size); + result = parameter_flashfs_write(parameters_token, buffer, buf_size); + result = result == buf_size ? OK : -EFBIG; + + } + free(enc_buff); - result = parameter_flashfs_write(parameters_token, buffer, buf_size); - result = result == buf_size ? OK : -EFBIG; } }