mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 10:51:54 -04:00
Avoids duplicate recovery attempts when data is synched.
This commit is contained in:
parent
97c7daedee
commit
8aac2965f9
1 changed files with 5 additions and 1 deletions
6
check.c
6
check.c
|
|
@ -283,6 +283,7 @@ static int repair(struct snapraid_state* state, int rehash, unsigned pos, unsign
|
|||
unsigned j;
|
||||
int n;
|
||||
int something_to_recover;
|
||||
int something_unsynched;
|
||||
|
||||
error = 0;
|
||||
|
||||
|
|
@ -405,6 +406,7 @@ static int repair(struct snapraid_state* state, int rehash, unsigned pos, unsign
|
|||
/* and we are not interested to recover DELETED ones. */
|
||||
n = 0;
|
||||
something_to_recover = 0; /* keep track if there is at least one block to fix */
|
||||
something_unsynched = 0; /* keep track if we have some unsynched info to process */
|
||||
for(j=0;j<failed_count;++j) {
|
||||
unsigned block_state = block_state_get(failed[j].block);
|
||||
|
||||
|
|
@ -418,6 +420,7 @@ static int repair(struct snapraid_state* state, int rehash, unsigned pos, unsign
|
|||
/* because the parity is computed with old content, and not with the new one. */
|
||||
/* Note that this recovering is done just to make possible to recover any other BLK one, */
|
||||
/* we are not really interested in DELETED, CHG (old version) and REP (old version). */
|
||||
something_unsynched = 1;
|
||||
|
||||
if (block_state == BLOCK_STATE_CHG
|
||||
&& hash_is_zero(failed[j].block->hash)
|
||||
|
|
@ -465,7 +468,8 @@ static int repair(struct snapraid_state* state, int rehash, unsigned pos, unsign
|
|||
}
|
||||
|
||||
/* if nothing to fix, we just don't try */
|
||||
if (something_to_recover) {
|
||||
/* if nothing unsynched we also don't retry, because it's the same try as before */
|
||||
if (something_to_recover && something_unsynched) {
|
||||
ret = repair_step(state, rehash, pos, diskmax, failed, failed_map, n, buffer, buffer_recov, buffer_zero);
|
||||
if (ret == 0) {
|
||||
/* we alreay marked as outdated CHG and REP blocks, we don't need to do it again */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue