diff options
-rw-r--r-- | drivers/scsi/ipr.c | 6 | ||||
-rw-r--r-- | drivers/scsi/ipr.h | 1 |
2 files changed, 4 insertions, 3 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 5890e5f92d82..154b78c5baa8 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -869,8 +869,8 @@ static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg, | |||
869 | 869 | ||
870 | if (hostrcb->hcam.notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) { | 870 | if (hostrcb->hcam.notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) { |
871 | if (res->sdev) { | 871 | if (res->sdev) { |
872 | res->sdev->hostdata = NULL; | ||
873 | res->del_from_ml = 1; | 872 | res->del_from_ml = 1; |
873 | res->cfgte.res_handle = IPR_INVALID_RES_HANDLE; | ||
874 | if (ioa_cfg->allow_ml_add_del) | 874 | if (ioa_cfg->allow_ml_add_del) |
875 | schedule_work(&ioa_cfg->work_q); | 875 | schedule_work(&ioa_cfg->work_q); |
876 | } else | 876 | } else |
@@ -2107,7 +2107,6 @@ restart: | |||
2107 | did_work = 1; | 2107 | did_work = 1; |
2108 | sdev = res->sdev; | 2108 | sdev = res->sdev; |
2109 | if (!scsi_device_get(sdev)) { | 2109 | if (!scsi_device_get(sdev)) { |
2110 | res->sdev = NULL; | ||
2111 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); | 2110 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); |
2112 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); | 2111 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); |
2113 | scsi_remove_device(sdev); | 2112 | scsi_remove_device(sdev); |
@@ -2124,6 +2123,7 @@ restart: | |||
2124 | bus = res->cfgte.res_addr.bus; | 2123 | bus = res->cfgte.res_addr.bus; |
2125 | target = res->cfgte.res_addr.target; | 2124 | target = res->cfgte.res_addr.target; |
2126 | lun = res->cfgte.res_addr.lun; | 2125 | lun = res->cfgte.res_addr.lun; |
2126 | res->add_to_ml = 0; | ||
2127 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); | 2127 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); |
2128 | scsi_add_device(ioa_cfg->host, bus, target, lun); | 2128 | scsi_add_device(ioa_cfg->host, bus, target, lun); |
2129 | spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); | 2129 | spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); |
@@ -4980,7 +4980,7 @@ static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd) | |||
4980 | list_for_each_entry_safe(res, temp, &old_res, queue) { | 4980 | list_for_each_entry_safe(res, temp, &old_res, queue) { |
4981 | if (res->sdev) { | 4981 | if (res->sdev) { |
4982 | res->del_from_ml = 1; | 4982 | res->del_from_ml = 1; |
4983 | res->sdev->hostdata = NULL; | 4983 | res->cfgte.res_handle = IPR_INVALID_RES_HANDLE; |
4984 | list_move_tail(&res->queue, &ioa_cfg->used_res_q); | 4984 | list_move_tail(&res->queue, &ioa_cfg->used_res_q); |
4985 | } else { | 4985 | } else { |
4986 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); | 4986 | list_move_tail(&res->queue, &ioa_cfg->free_res_q); |
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h index fd360bfe56dd..ee9169d817b1 100644 --- a/drivers/scsi/ipr.h +++ b/drivers/scsi/ipr.h | |||
@@ -133,6 +133,7 @@ | |||
133 | #define IPR_MAX_SCSI_RATE(width) ((320 * 10) / ((width) / 8)) | 133 | #define IPR_MAX_SCSI_RATE(width) ((320 * 10) / ((width) / 8)) |
134 | 134 | ||
135 | #define IPR_IOA_RES_HANDLE 0xffffffff | 135 | #define IPR_IOA_RES_HANDLE 0xffffffff |
136 | #define IPR_INVALID_RES_HANDLE 0 | ||
136 | #define IPR_IOA_RES_ADDR 0x00ffffff | 137 | #define IPR_IOA_RES_ADDR 0x00ffffff |
137 | 138 | ||
138 | /* | 139 | /* |