Hi Sasha. > diff --git a/common/state/backend_storage.c b/common/state/backend_storage.c > index 6ec58a0c97..218c67f2d7 100644 > --- a/common/state/backend_storage.c > +++ b/common/state/backend_storage.c > @@ -69,22 +69,29 @@ int state_storage_write(struct state_backend_storage *storage, > return -EIO; > } > > -/** > - * state_storage_restore_consistency - Restore consistency on all storage backends > - * @param storage Storage object > - * @param buf Buffer with valid data that should be on all buckets after this operation > - * @param len Length of the buffer > - * @return 0 on success, -errno otherwise > - * > - * This function brings valid data onto all buckets we have to ensure that all > - * data copies are in sync. In the current implementation we just write the data > - * to all buckets. Bucket implementations that need to keep the number of writes > - * low, can read their own copy first and compare it. > - */ > -int state_storage_restore_consistency(struct state_backend_storage *storage, > - const void * buf, ssize_t len) > +static int bucket_refresh(struct state_backend_storage *storage, > + struct state_backend_storage_bucket *bucket, void *buf, ssize_t len) > { > - return state_storage_write(storage, buf, len); > + int ret; > + > + if (bucket->needs_refresh) > + goto refresh; > + > + if (bucket->len != len) > + goto refresh; > + > + if (memcmp(bucket->buf, buf, len)) > + goto refresh; > + > + return 0; > + > +refresh: > + ret = bucket->write(bucket, buf, len); In the code above we check needs_refresh and len. But needs_refresh is never set back to 0 so it looks like we will refresh it too often. The same with the len argument. > + /* > + * Iterate over all buckets. The first valid one we find is the > + * one we want to use. > + */ > list_for_each_entry(bucket, &storage->buckets, bucket_list) { > - ret = bucket->read(bucket, buf, len); > - if (ret) { > + ret = bucket->read(bucket, &bucket->buf, &bucket->len); > + if (ret == -EUCLEAN) { > + bucket->needs_refresh = 1; > + } else if (ret) { This is where we mark it as need_refresh. Sam _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox