diff options
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_scsih.c')
-rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_scsih.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 8dc2ad4a0a3..5690f09e010 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c | |||
@@ -7318,22 +7318,27 @@ _scsih_probe_sas(struct MPT2SAS_ADAPTER *ioc) | |||
7318 | /* SAS Device List */ | 7318 | /* SAS Device List */ |
7319 | list_for_each_entry_safe(sas_device, next, &ioc->sas_device_init_list, | 7319 | list_for_each_entry_safe(sas_device, next, &ioc->sas_device_init_list, |
7320 | list) { | 7320 | list) { |
7321 | spin_lock_irqsave(&ioc->sas_device_lock, flags); | ||
7322 | list_move_tail(&sas_device->list, &ioc->sas_device_list); | ||
7323 | spin_unlock_irqrestore(&ioc->sas_device_lock, flags); | ||
7324 | 7321 | ||
7325 | if (ioc->hide_drives) | 7322 | if (ioc->hide_drives) |
7326 | continue; | 7323 | continue; |
7327 | 7324 | ||
7328 | if (!mpt2sas_transport_port_add(ioc, sas_device->handle, | 7325 | if (!mpt2sas_transport_port_add(ioc, sas_device->handle, |
7329 | sas_device->sas_address_parent)) { | 7326 | sas_device->sas_address_parent)) { |
7330 | _scsih_sas_device_remove(ioc, sas_device); | 7327 | list_del(&sas_device->list); |
7328 | kfree(sas_device); | ||
7329 | continue; | ||
7331 | } else if (!sas_device->starget) { | 7330 | } else if (!sas_device->starget) { |
7332 | mpt2sas_transport_port_remove(ioc, | 7331 | mpt2sas_transport_port_remove(ioc, |
7333 | sas_device->sas_address, | 7332 | sas_device->sas_address, |
7334 | sas_device->sas_address_parent); | 7333 | sas_device->sas_address_parent); |
7335 | _scsih_sas_device_remove(ioc, sas_device); | 7334 | list_del(&sas_device->list); |
7335 | kfree(sas_device); | ||
7336 | continue; | ||
7337 | |||
7336 | } | 7338 | } |
7339 | spin_lock_irqsave(&ioc->sas_device_lock, flags); | ||
7340 | list_move_tail(&sas_device->list, &ioc->sas_device_list); | ||
7341 | spin_unlock_irqrestore(&ioc->sas_device_lock, flags); | ||
7337 | } | 7342 | } |
7338 | } | 7343 | } |
7339 | 7344 | ||