Btrfs: do not merge rbios if their fail stripe index are not identical
Since fail stripe index in rbio would be used to decide which algorithm reconstruction would be run, we cannot merge rbios if their's fail striped indexes are different, otherwise, one of the two reconstructions would fail. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
db34be19c4
Коммит
cc54ff626a
|
@ -600,6 +600,25 @@ static int rbio_can_merge(struct btrfs_raid_bio *last,
|
|||
if (last->operation == BTRFS_RBIO_REBUILD_MISSING)
|
||||
return 0;
|
||||
|
||||
if (last->operation == BTRFS_RBIO_READ_REBUILD) {
|
||||
int fa = last->faila;
|
||||
int fb = last->failb;
|
||||
int cur_fa = cur->faila;
|
||||
int cur_fb = cur->failb;
|
||||
|
||||
if (last->faila >= last->failb) {
|
||||
fa = last->failb;
|
||||
fb = last->faila;
|
||||
}
|
||||
|
||||
if (cur->faila >= cur->failb) {
|
||||
cur_fa = cur->failb;
|
||||
cur_fb = cur->faila;
|
||||
}
|
||||
|
||||
if (fa != cur_fa || fb != cur_fb)
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче