From 86e711a3939394aa106069805cdffbdb578e7acb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Schmidt?= Date: Tue, 1 Jun 2004 12:28:45 +0000 Subject: [PATCH] When waiting for drive to become ready, reinit the request params as they might get trashed by autosensing. --- sys/dev/ata/atapi-cd.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c index 0d627d50c2c..ab1e110ee71 100644 --- a/sys/dev/ata/atapi-cd.c +++ b/sys/dev/ata/atapi-cd.c @@ -488,17 +488,18 @@ acd_geom_access(struct g_provider *pp, int dr, int dw, int de) if (!(request = ata_alloc_request())) return ENOMEM; - request->device = cdp->device; - request->driver = cdp; - bcopy(ccb, request->u.atapi.ccb, 16); - request->flags = ATA_R_ATAPI; - request->timeout = 5; - /* wait if drive is not finished loading the medium */ while (timeout--) { + bzero(request, sizeof(struct ata_request)); + request->device = cdp->device; + request->driver = cdp; + bcopy(ccb, request->u.atapi.ccb, 16); + request->flags = ATA_R_ATAPI; + request->timeout = 5; ata_queue_request(request); if (!request->error && - request->u.atapi.sense_data.sense_key == 2 && + (request->u.atapi.sense_data.sense_key == 2 || + request->u.atapi.sense_data.sense_key == 7) && request->u.atapi.sense_data.asc == 4 && request->u.atapi.sense_data.ascq == 1) tsleep(&timeout, PRIBIO, "acdld", hz / 2);