mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 19:01:57 -04:00
Enforce mode parity limits and use active forwarder in raid_data
This commit is contained in:
parent
fcb78a8e29
commit
380778c591
1 changed files with 19 additions and 4 deletions
|
|
@ -80,8 +80,12 @@ void raid_gen(int nd, int np, size_t size, void **v)
|
|||
|
||||
/* enforce limit on number of failures */
|
||||
BUG_ON(np < 1);
|
||||
BUG_ON(np > RAID_PARITY_MAX);
|
||||
if (raid_mode_active == RAID_MODE_VANDERMONDE_RAID)
|
||||
BUG_ON(np > 3);
|
||||
else
|
||||
BUG_ON(np > RAID_PARITY_MAX);
|
||||
|
||||
BUG_ON(raid_gen_ptr[np - 1] == 0);
|
||||
raid_gen_ptr[np - 1](nd, size, v);
|
||||
}
|
||||
|
||||
|
|
@ -104,7 +108,10 @@ void raid_rec(int nr, int *ir, int nd, int np, size_t size, void **v)
|
|||
|
||||
/* enforce limit on number of failures */
|
||||
BUG_ON(nr > np);
|
||||
BUG_ON(np > RAID_PARITY_MAX);
|
||||
if (raid_mode_active == RAID_MODE_VANDERMONDE_RAID)
|
||||
BUG_ON(np > 3);
|
||||
else
|
||||
BUG_ON(np > RAID_PARITY_MAX);
|
||||
|
||||
/* enforce order in index vector */
|
||||
BUG_ON(nr >= 2 && ir[0] >= ir[1]);
|
||||
|
|
@ -183,9 +190,17 @@ void raid_data(int nr, int *id, int *ip, int nd, size_t size, void **v)
|
|||
BUG_ON(nr >= 5 && ip[3] >= ip[4]);
|
||||
BUG_ON(nr >= 6 && ip[4] >= ip[5]);
|
||||
|
||||
/* enforce limit on index vector for parity */
|
||||
if (raid_mode_active == RAID_MODE_VANDERMONDE_RAID)
|
||||
BUG_ON(nr > 0 && ip[nr - 1] >= 3);
|
||||
else
|
||||
BUG_ON(nr > 0 && ip[nr - 1] >= RAID_PARITY_MAX);
|
||||
|
||||
/* if failed data is present */
|
||||
if (nr != 0)
|
||||
raid_rec_algo[nr - 1].rec(nr, id, ip, nd, size, v);
|
||||
if (nr != 0) {
|
||||
BUG_ON(raid_rec_ptr[nr - 1] == 0);
|
||||
raid_rec_ptr[nr - 1](nr, id, ip, nd, size, v);
|
||||
}
|
||||
}
|
||||
|
||||
const char * raid_gen_tag(int na)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue