浏览代码

[SCSI] ipr: Fix ipr PCI hotplug hang with CDROM attach

Currently, during PCI hotplug remove, if the upper layer
drivers of the attached devices send commands down as part
of the remove action, like a CDROM, the hotplug action
will hang forever due to the ipr driver returning
SCSI_MLQUEUE_HOST_BUSY. Patch fixes this.

Signed-off-by: Brian King <brking@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
brking@us.ibm.com 20 年之前
父节点
当前提交
5cbf5eaef7
共有 1 个文件被更改,包括 1 次插入2 次删除
  1. 1 2
      drivers/scsi/ipr.c

+ 1 - 2
drivers/scsi/ipr.c

@@ -5886,6 +5886,7 @@ static void __ipr_remove(struct pci_dev *pdev)
 
 
 	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
 	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
 	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
 	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+	flush_scheduled_work();
 	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
 	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
 
 
 	spin_lock(&ipr_driver_lock);
 	spin_lock(&ipr_driver_lock);
@@ -5916,8 +5917,6 @@ static void ipr_remove(struct pci_dev *pdev)
 
 
 	ENTER;
 	ENTER;
 
 
-	ioa_cfg->allow_cmds = 0;
-	flush_scheduled_work();
 	ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj,
 	ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj,
 			      &ipr_trace_attr);
 			      &ipr_trace_attr);
 	ipr_remove_dump_file(&ioa_cfg->host->shost_classdev.kobj,
 	ipr_remove_dump_file(&ioa_cfg->host->shost_classdev.kobj,