aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/ipr.c6
-rw-r--r--drivers/scsi/ipr.h1
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/*