diff options
Diffstat (limited to 'drivers/scsi/ipr.c')
-rw-r--r-- | drivers/scsi/ipr.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index d841e98a8bd5..0621238fac4a 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -1301,7 +1301,7 @@ static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg, | |||
1301 | ipr_clear_res_target(res); | 1301 | ipr_clear_res_target(res); |
1302 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); | 1302 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); |
1303 | } | 1303 | } |
1304 | } else if (!res->sdev) { | 1304 | } else if (!res->sdev || res->del_from_ml) { |
1305 | res->add_to_ml = 1; | 1305 | res->add_to_ml = 1; |
1306 | if (ioa_cfg->allow_ml_add_del) | 1306 | if (ioa_cfg->allow_ml_add_del) |
1307 | schedule_work(&ioa_cfg->work_q); | 1307 | schedule_work(&ioa_cfg->work_q); |
@@ -3104,7 +3104,10 @@ restart: | |||
3104 | did_work = 1; | 3104 | did_work = 1; |
3105 | sdev = res->sdev; | 3105 | sdev = res->sdev; |
3106 | if (!scsi_device_get(sdev)) { | 3106 | if (!scsi_device_get(sdev)) { |
3107 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); | 3107 | if (!res->add_to_ml) |
3108 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); | ||
3109 | else | ||
3110 | res->del_from_ml = 0; | ||
3108 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); | 3111 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); |
3109 | scsi_remove_device(sdev); | 3112 | scsi_remove_device(sdev); |
3110 | scsi_device_put(sdev); | 3113 | scsi_device_put(sdev); |
@@ -8864,7 +8867,7 @@ static void __ipr_remove(struct pci_dev *pdev) | |||
8864 | 8867 | ||
8865 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); | 8868 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags); |
8866 | wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); | 8869 | wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload); |
8867 | flush_scheduled_work(); | 8870 | flush_work_sync(&ioa_cfg->work_q); |
8868 | spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); | 8871 | spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags); |
8869 | 8872 | ||
8870 | spin_lock(&ipr_driver_lock); | 8873 | spin_lock(&ipr_driver_lock); |