|
@@ -3435,7 +3435,7 @@ void ata_scsi_scan_host(struct ata_port *ap, int sync)
|
|
|
" switching to async\n");
|
|
|
}
|
|
|
|
|
|
- queue_delayed_work(ata_aux_wq, &ap->hotplug_task,
|
|
|
+ queue_delayed_work(system_long_wq, &ap->hotplug_task,
|
|
|
round_jiffies_relative(HZ));
|
|
|
}
|
|
|
|
|
@@ -3582,6 +3582,7 @@ void ata_scsi_hotplug(struct work_struct *work)
|
|
|
}
|
|
|
|
|
|
DPRINTK("ENTER\n");
|
|
|
+ mutex_lock(&ap->scsi_scan_mutex);
|
|
|
|
|
|
/* Unplug detached devices. We cannot use link iterator here
|
|
|
* because PMP links have to be scanned even if PMP is
|
|
@@ -3595,6 +3596,7 @@ void ata_scsi_hotplug(struct work_struct *work)
|
|
|
/* scan for new ones */
|
|
|
ata_scsi_scan_host(ap, 0);
|
|
|
|
|
|
+ mutex_unlock(&ap->scsi_scan_mutex);
|
|
|
DPRINTK("EXIT\n");
|
|
|
}
|
|
|
|
|
@@ -3673,9 +3675,7 @@ static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
|
|
|
* @work: Pointer to ATA port to perform scsi_rescan_device()
|
|
|
*
|
|
|
* After ATA pass thru (SAT) commands are executed successfully,
|
|
|
- * libata need to propagate the changes to SCSI layer. This
|
|
|
- * function must be executed from ata_aux_wq such that sdev
|
|
|
- * attach/detach don't race with rescan.
|
|
|
+ * libata need to propagate the changes to SCSI layer.
|
|
|
*
|
|
|
* LOCKING:
|
|
|
* Kernel thread context (may sleep).
|
|
@@ -3688,6 +3688,7 @@ void ata_scsi_dev_rescan(struct work_struct *work)
|
|
|
struct ata_device *dev;
|
|
|
unsigned long flags;
|
|
|
|
|
|
+ mutex_lock(&ap->scsi_scan_mutex);
|
|
|
spin_lock_irqsave(ap->lock, flags);
|
|
|
|
|
|
ata_for_each_link(link, ap, EDGE) {
|
|
@@ -3707,6 +3708,7 @@ void ata_scsi_dev_rescan(struct work_struct *work)
|
|
|
}
|
|
|
|
|
|
spin_unlock_irqrestore(ap->lock, flags);
|
|
|
+ mutex_unlock(&ap->scsi_scan_mutex);
|
|
|
}
|
|
|
|
|
|
/**
|