[PATCH] libata: hold host_set lock while finishing internal qc
authorTejun Heo <htejun@gmail.com>
Mon, 15 May 2006 11:57:33 +0000 (20:57 +0900)
committerTejun Heo <htejun@gmail.com>
Mon, 15 May 2006 11:57:33 +0000 (20:57 +0900)
Hold host_set lock while finishing internal qc.

Signed-off-by: Tejun Heo <htejun@gmail.com>
drivers/scsi/libata-core.c

index 86cd0e0895d0d372eb1b83c8f923009883e03d5f..13bce43f1915789abc70d32369d7379371a5308f 100644 (file)
@@ -1031,6 +1031,9 @@ unsigned ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
                spin_unlock_irqrestore(&ap->host_set->lock, flags);
        }
 
+       /* finish up */
+       spin_lock_irqsave(&ap->host_set->lock, flags);
+
        *tf = qc->tf;
        err_mask = qc->err_mask;
 
@@ -1052,6 +1055,8 @@ unsigned ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
                ata_port_probe(ap);
        }
 
+       spin_unlock_irqrestore(&ap->host_set->lock, flags);
+
        return err_mask;
 }