diff -Naur linux-2.6.0/drivers/scsi/sg.c linux-2.6.0-sg/drivers/scsi/sg.c --- linux-2.6.0/drivers/scsi/sg.c Mon Dec 8 11:10:40 2003 +++ linux-2.6.0-sg/drivers/scsi/sg.c Mon Dec 29 13:03:35 2003 @@ -1219,6 +1219,8 @@ Sg_device *sdp = NULL; Sg_fd *sfp; Sg_request *srp = NULL; + request_queue_t *q; + unsigned long flags = 0; if (SCpnt && (SRpnt = SCpnt->sc_request)) srp = (Sg_request *) SRpnt->upper_private_data; @@ -1284,6 +1286,12 @@ } /* Rely on write phase to clean out srp status values, so no "else" */ + q = SRpnt->sr_device->request_queue; + spin_lock_irqsave(q->queue_lock, flags); + if (blk_rq_tagged(SRpnt->sr_request)) + blk_queue_end_tag(q, SRpnt->sr_request); + spin_unlock_irqrestore(q->queue_lock, flags); + scsi_release_request(SRpnt); SRpnt = NULL; if (sfp->closed) { /* whoops this fd already released, cleanup */