geom_raid (RAID5): do not lose bp->bio_error, keep it in pbp->bio_error
and return it by passing to g_raid_iodone() Approved by: mav (mentor) MFC after: 3 days
This commit is contained in:
parent
1f9b8d0bcc
commit
748192b1b0
@ -373,15 +373,15 @@ g_raid_tr_iodone_raid5(struct g_raid_tr_object *tr,
|
|||||||
struct g_raid_subdisk *sd, struct bio *bp)
|
struct g_raid_subdisk *sd, struct bio *bp)
|
||||||
{
|
{
|
||||||
struct bio *pbp;
|
struct bio *pbp;
|
||||||
int error;
|
|
||||||
|
|
||||||
pbp = bp->bio_parent;
|
pbp = bp->bio_parent;
|
||||||
|
if (pbp->bio_error == 0)
|
||||||
|
pbp->bio_error = bp->bio_error;
|
||||||
pbp->bio_inbed++;
|
pbp->bio_inbed++;
|
||||||
error = bp->bio_error;
|
|
||||||
g_destroy_bio(bp);
|
g_destroy_bio(bp);
|
||||||
if (pbp->bio_children == pbp->bio_inbed) {
|
if (pbp->bio_children == pbp->bio_inbed) {
|
||||||
pbp->bio_completed = pbp->bio_length;
|
pbp->bio_completed = pbp->bio_length;
|
||||||
g_raid_iodone(pbp, error);
|
g_raid_iodone(pbp, pbp->bio_error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user