|
@@ -482,6 +482,7 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
|
|
|
if (vtarget) {
|
|
|
vtarget->id = pg0->CurrentTargetID;
|
|
|
vtarget->channel = pg0->CurrentBus;
|
|
|
+ vtarget->deleted = 0;
|
|
|
}
|
|
|
}
|
|
|
*((struct mptfc_rport_info **)rport->dd_data) = ri;
|
|
@@ -1092,6 +1093,8 @@ mptfc_setup_reset(struct work_struct *work)
|
|
|
container_of(work, MPT_ADAPTER, fc_setup_reset_work);
|
|
|
u64 pn;
|
|
|
struct mptfc_rport_info *ri;
|
|
|
+ struct scsi_target *starget;
|
|
|
+ VirtTarget *vtarget;
|
|
|
|
|
|
/* reset about to happen, delete (block) all rports */
|
|
|
list_for_each_entry(ri, &ioc->fc_rports, list) {
|
|
@@ -1099,6 +1102,12 @@ mptfc_setup_reset(struct work_struct *work)
|
|
|
ri->flags &= ~MPT_RPORT_INFO_FLAGS_REGISTERED;
|
|
|
fc_remote_port_delete(ri->rport); /* won't sleep */
|
|
|
ri->rport = NULL;
|
|
|
+ starget = ri->starget;
|
|
|
+ if (starget) {
|
|
|
+ vtarget = starget->hostdata;
|
|
|
+ if (vtarget)
|
|
|
+ vtarget->deleted = 1;
|
|
|
+ }
|
|
|
|
|
|
pn = (u64)ri->pg0.WWPN.High << 32 |
|
|
|
(u64)ri->pg0.WWPN.Low;
|
|
@@ -1119,6 +1128,8 @@ mptfc_rescan_devices(struct work_struct *work)
|
|
|
int ii;
|
|
|
u64 pn;
|
|
|
struct mptfc_rport_info *ri;
|
|
|
+ struct scsi_target *starget;
|
|
|
+ VirtTarget *vtarget;
|
|
|
|
|
|
/* start by tagging all ports as missing */
|
|
|
list_for_each_entry(ri, &ioc->fc_rports, list) {
|
|
@@ -1146,6 +1157,12 @@ mptfc_rescan_devices(struct work_struct *work)
|
|
|
MPT_RPORT_INFO_FLAGS_MISSING);
|
|
|
fc_remote_port_delete(ri->rport); /* won't sleep */
|
|
|
ri->rport = NULL;
|
|
|
+ starget = ri->starget;
|
|
|
+ if (starget) {
|
|
|
+ vtarget = starget->hostdata;
|
|
|
+ if (vtarget)
|
|
|
+ vtarget->deleted = 1;
|
|
|
+ }
|
|
|
|
|
|
pn = (u64)ri->pg0.WWPN.High << 32 |
|
|
|
(u64)ri->pg0.WWPN.Low;
|