forked from Minki/linux
scsi: smartpqi: Correct driver removal with HBA disks
Correct rmmod hangs when using HBA disks with write cache enabled. Do not set controller flag "in_shutdown" during rmmod. SCSI SYNCHRONIZE CACHE(10) and SCSI SYNCHRONIZE CACHE(16) requests were blocked with SCSI_MLQUEUE_HOST_BUSY. Link: https://lore.kernel.org/r/160512627928.2359.10698615071827614781.stgit@brunhilda Reviewed-by: Scott Benesh <scott.benesh@microchip.com> Reviewed-by: Scott Teel <scott.teel@microchip.com> Signed-off-by: Don Brace <don.brace@microchip.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
a364a3ea32
commit
1bdf6e9343
@ -345,10 +345,9 @@ static inline void pqi_device_remove_start(struct pqi_scsi_dev *device)
|
||||
device->in_remove = true;
|
||||
}
|
||||
|
||||
static inline bool pqi_device_in_remove(struct pqi_ctrl_info *ctrl_info,
|
||||
struct pqi_scsi_dev *device)
|
||||
static inline bool pqi_device_in_remove(struct pqi_scsi_dev *device)
|
||||
{
|
||||
return device->in_remove && !ctrl_info->in_shutdown;
|
||||
return device->in_remove;
|
||||
}
|
||||
|
||||
static inline void pqi_ctrl_shutdown_start(struct pqi_ctrl_info *ctrl_info)
|
||||
@ -5347,8 +5346,7 @@ static int pqi_scsi_queue_command(struct Scsi_Host *shost,
|
||||
|
||||
atomic_inc(&device->scsi_cmds_outstanding);
|
||||
|
||||
if (pqi_ctrl_offline(ctrl_info) || pqi_device_in_remove(ctrl_info,
|
||||
device)) {
|
||||
if (pqi_ctrl_offline(ctrl_info) || pqi_device_in_remove(device)) {
|
||||
set_host_byte(scmd, DID_NO_CONNECT);
|
||||
pqi_scsi_done(scmd);
|
||||
return 0;
|
||||
@ -8031,8 +8029,6 @@ static void pqi_pci_remove(struct pci_dev *pci_dev)
|
||||
if (!ctrl_info)
|
||||
return;
|
||||
|
||||
ctrl_info->in_shutdown = true;
|
||||
|
||||
pqi_remove_ctrl(ctrl_info);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user