X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/blobdiff_plain/4e4d3b292ed5a013ed4ff0e0516dbd744552104d..77912481ac5f5d886b07c9f7038b03eba09b2bca:/sys/dev/disk/ata/ata-raid.c diff --git a/sys/dev/disk/ata/ata-raid.c b/sys/dev/disk/ata/ata-raid.c index 51d7fc1eba..bf986c0757 100644 --- a/sys/dev/disk/ata/ata-raid.c +++ b/sys/dev/disk/ata/ata-raid.c @@ -676,6 +676,8 @@ ar_done(struct bio *bio) struct ar_softc *rdp = (struct ar_softc *)bio->bio_caller_info1.ptr; struct ar_buf *buf = (struct ar_buf *)bio->bio_buf; + get_mplock(); + switch (rdp->flags & (AR_F_RAID0 | AR_F_RAID1 | AR_F_SPAN)) { case AR_F_SPAN: case AR_F_RAID0: @@ -708,6 +710,7 @@ ar_done(struct bio *bio) buf->bp.b_error = 0; dev_dstrategy(AD_SOFTC(rdp->disks[buf->drive])->dev, &buf->bp.b_bio1); + rel_mplock(); return; } else { @@ -743,6 +746,7 @@ ar_done(struct bio *bio) kprintf("ar%d: unknown array type in ar_done\n", rdp->lun); } kfree(buf, M_AR); + rel_mplock(); } static void