[PATCH 3/9] state: backend_raw: remove hard coded limit of two copies
Marc Kleine-Budde
mkl at pengutronix.de
Tue May 26 04:37:47 PDT 2015
Although there is the define RAW_BACKEND_COPIES, the state_backend_raw_save()
function silently assumes exactly two copies. This patch removes that assumtion
by looping over all copies, but saving the one we're read from at the end.
Signed-off-by: Marc Kleine-Budde <mkl at pengutronix.de>
---
common/state.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/common/state.c b/common/state.c
index 82a21e912206..79e7f4cc6849 100644
--- a/common/state.c
+++ b/common/state.c
@@ -1167,7 +1167,7 @@ static int state_backend_raw_save(struct state_backend *backend,
{
struct state_backend_raw *backend_raw = container_of(backend,
struct state_backend_raw, backend);
- int ret = 0, size, fd;
+ int ret = 0, size, fd, i;
void *buf, *data;
struct backend_raw_header *header;
struct state_variable *sv;
@@ -1192,10 +1192,17 @@ static int state_backend_raw_save(struct state_backend *backend,
if (fd < 0)
goto out_free;
- ret = backend_raw_write_one(backend_raw, state, fd,
- !backend_raw->num_copy_read, buf, size);
- if (ret)
- goto out_close;
+ /* save other slots first */
+ for (i = 0; i < RAW_BACKEND_COPIES; i++) {
+ if (i == backend_raw->num_copy_read)
+ continue;
+
+ ret = backend_raw_write_one(backend_raw, state, fd,
+ i, buf, size);
+ if (ret)
+ goto out_close;
+
+ }
ret = backend_raw_write_one(backend_raw, state, fd,
backend_raw->num_copy_read, buf, size);
--
2.1.4
More information about the barebox
mailing list