diff options
| author | Søren Schmidt <sos@FreeBSD.org> | 2005-04-20 14:14:08 +0000 |
|---|---|---|
| committer | Søren Schmidt <sos@FreeBSD.org> | 2005-04-20 14:14:08 +0000 |
| commit | 46917bb6f4204ae7ac1e2dd965d6f608f3e9d59b (patch) | |
| tree | 69f1cafed3d4bd68b61dddd656c26883b489c410 /sys/dev/ata | |
| parent | 3d5c30f7c2f787e4ac34403ce812a9b2d04b8841 (diff) | |
Notes
Diffstat (limited to 'sys/dev/ata')
| -rw-r--r-- | sys/dev/ata/ata-raid.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-raid.c b/sys/dev/ata/ata-raid.c index ecfa324ca281..fdf0541aa4d6 100644 --- a/sys/dev/ata/ata-raid.c +++ b/sys/dev/ata/ata-raid.c @@ -690,8 +690,24 @@ ata_raid_done(struct ata_request *request) printf("ar%d: unknown array type in ata_raid_done\n", rdp->lun); } - if (finished) + if (finished) { + if ((rdp->status & AR_S_REBUILDING) && + rdp->rebuild_lba >= rdp->total_sectors) { + int disk; + + for (disk = 0; disk < rdp->total_disks; disk++) { + if ((rdp->disks[disk].flags & + (AR_DF_PRESENT | AR_DF_ASSIGNED | AR_DF_SPARE)) == + (AR_DF_PRESENT | AR_DF_ASSIGNED | AR_DF_SPARE)) { + rdp->disks[disk].flags &= ~AR_DF_SPARE; + rdp->disks[disk].flags |= AR_DF_ONLINE; + } + } + rdp->status &= ~AR_S_REBUILDING; + ata_raid_config_changed(rdp, 1); + } biodone(bp); + } if (composite) { if (finished) { |
