Lines Matching refs:tgt
494 static int ibmvfc_set_tgt_action(struct ibmvfc_target *tgt, in ibmvfc_set_tgt_action() argument
499 switch (tgt->action) { in ibmvfc_set_tgt_action()
503 tgt->action = action; in ibmvfc_set_tgt_action()
510 tgt->action = action; in ibmvfc_set_tgt_action()
516 tgt->action = action; in ibmvfc_set_tgt_action()
522 tgt->action = action; in ibmvfc_set_tgt_action()
528 tgt->action = action; in ibmvfc_set_tgt_action()
535 tgt->action = action; in ibmvfc_set_tgt_action()
541 tgt->add_rport = 0; in ibmvfc_set_tgt_action()
656 static void ibmvfc_del_tgt(struct ibmvfc_target *tgt) in ibmvfc_del_tgt() argument
658 if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT)) { in ibmvfc_del_tgt()
659 tgt->job_step = ibmvfc_tgt_implicit_logout_and_del; in ibmvfc_del_tgt()
660 tgt->init_retries = 0; in ibmvfc_del_tgt()
662 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_del_tgt()
674 struct ibmvfc_target *tgt; in ibmvfc_link_down() local
678 list_for_each_entry(tgt, &vhost->targets, queue) in ibmvfc_link_down()
679 ibmvfc_del_tgt(tgt); in ibmvfc_link_down()
696 struct ibmvfc_target *tgt; in ibmvfc_init_host() local
711 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_init_host()
713 tgt->need_login = 1; in ibmvfc_init_host()
715 ibmvfc_del_tgt(tgt); in ibmvfc_init_host()
1220 struct ibmvfc_target *tgt; in __ibmvfc_get_target() local
1222 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_get_target()
1223 if (tgt->target_id == starget->id) { in __ibmvfc_get_target()
1224 kref_get(&tgt->kref); in __ibmvfc_get_target()
1225 return tgt; in __ibmvfc_get_target()
1240 struct ibmvfc_target *tgt; in ibmvfc_get_target() local
1244 tgt = __ibmvfc_get_target(starget); in ibmvfc_get_target()
1246 return tgt; in ibmvfc_get_target()
1355 struct ibmvfc_target *tgt = container_of(kref, struct ibmvfc_target, kref); in ibmvfc_release_tgt() local
1356 kfree(tgt); in ibmvfc_release_tgt()
1368 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_node_name() local
1369 fc_starget_port_name(starget) = tgt ? tgt->ids.node_name : 0; in ibmvfc_get_starget_node_name()
1370 if (tgt) in ibmvfc_get_starget_node_name()
1371 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_node_name()
1383 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_port_name() local
1384 fc_starget_port_name(starget) = tgt ? tgt->ids.port_name : 0; in ibmvfc_get_starget_port_name()
1385 if (tgt) in ibmvfc_get_starget_port_name()
1386 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_port_name()
1398 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_port_id() local
1399 fc_starget_port_id(starget) = tgt ? tgt->scsi_id : -1; in ibmvfc_get_starget_port_id()
1400 if (tgt) in ibmvfc_get_starget_port_id()
1401 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_port_id()
1796 struct ibmvfc_target *tgt; in ibmvfc_relogin() local
1800 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_relogin()
1801 if (rport == tgt->rport) { in ibmvfc_relogin()
1802 ibmvfc_del_tgt(tgt); in ibmvfc_relogin()
2078 struct ibmvfc_target *tgt; in ibmvfc_bsg_plogi() local
2086 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_bsg_plogi()
2087 if (tgt->scsi_id == port_id) { in ibmvfc_bsg_plogi()
3010 struct ibmvfc_target *tgt; in ibmvfc_terminate_rport_io() local
3029 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_terminate_rport_io()
3030 if (tgt->scsi_id == rport->port_id) { in ibmvfc_terminate_rport_io()
3036 if (found && tgt->action == IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT) { in ibmvfc_terminate_rport_io()
3042 ibmvfc_del_tgt(tgt); in ibmvfc_terminate_rport_io()
3122 struct ibmvfc_target *tgt; in ibmvfc_handle_async() local
3169 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_handle_async()
3172 if (crq->scsi_id && cpu_to_be64(tgt->scsi_id) != crq->scsi_id) in ibmvfc_handle_async()
3174 if (crq->wwpn && cpu_to_be64(tgt->ids.port_name) != crq->wwpn) in ibmvfc_handle_async()
3176 if (crq->node_name && cpu_to_be64(tgt->ids.node_name) != crq->node_name) in ibmvfc_handle_async()
3178 if (tgt->need_login && be64_to_cpu(crq->event) == IBMVFC_AE_ELS_LOGO) in ibmvfc_handle_async()
3179 tgt->logo_rcvd = 1; in ibmvfc_handle_async()
3180 if (!tgt->need_login || be64_to_cpu(crq->event) == IBMVFC_AE_ELS_PLOGI) { in ibmvfc_handle_async()
3181 ibmvfc_del_tgt(tgt); in ibmvfc_handle_async()
3888 static void ibmvfc_init_tgt(struct ibmvfc_target *tgt, in ibmvfc_init_tgt() argument
3891 if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT)) in ibmvfc_init_tgt()
3892 tgt->job_step = job_step; in ibmvfc_init_tgt()
3893 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_init_tgt()
3904 static int ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt, in ibmvfc_retry_tgt_init() argument
3907 if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) { in ibmvfc_retry_tgt_init()
3908 ibmvfc_del_tgt(tgt); in ibmvfc_retry_tgt_init()
3909 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_retry_tgt_init()
3912 ibmvfc_init_tgt(tgt, job_step); in ibmvfc_retry_tgt_init()
3957 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_prli_done() local
3965 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_prli_done()
3968 tgt_dbg(tgt, "Process Login succeeded: %X %02X %04X\n", in ibmvfc_tgt_prli_done()
3975 tgt->need_login = 0; in ibmvfc_tgt_prli_done()
3976 tgt->ids.roles = 0; in ibmvfc_tgt_prli_done()
3978 tgt->ids.roles |= FC_PORT_ROLE_FCP_TARGET; in ibmvfc_tgt_prli_done()
3980 tgt->ids.roles |= FC_PORT_ROLE_FCP_INITIATOR; in ibmvfc_tgt_prli_done()
3981 tgt->add_rport = 1; in ibmvfc_tgt_prli_done()
3983 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3985 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
3987 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3989 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3994 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
4000 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_prli_done()
4001 else if (tgt->logo_rcvd) in ibmvfc_tgt_prli_done()
4002 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_prli_done()
4004 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
4006 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
4008 tgt_log(tgt, level, "Process Login failed: %s (%x:%x) rc=0x%02X\n", in ibmvfc_tgt_prli_done()
4014 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_prli_done()
4024 static void ibmvfc_tgt_send_prli(struct ibmvfc_target *tgt) in ibmvfc_tgt_send_prli() argument
4027 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_send_prli()
4033 kref_get(&tgt->kref); in ibmvfc_tgt_send_prli()
4037 evt->tgt = tgt; in ibmvfc_tgt_send_prli()
4042 prli->target_wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_send_prli()
4048 prli->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_send_prli()
4058 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_send_prli()
4061 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_prli()
4062 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_prli()
4064 tgt_dbg(tgt, "Sent process login\n"); in ibmvfc_tgt_send_prli()
4074 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_plogi_done() local
4081 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_plogi_done()
4084 tgt_dbg(tgt, "Port Login succeeded\n"); in ibmvfc_tgt_plogi_done()
4085 if (tgt->ids.port_name && in ibmvfc_tgt_plogi_done()
4086 tgt->ids.port_name != wwn_to_u64(rsp->service_parms.port_name)) { in ibmvfc_tgt_plogi_done()
4088 tgt_dbg(tgt, "Port re-init required\n"); in ibmvfc_tgt_plogi_done()
4091 tgt->ids.node_name = wwn_to_u64(rsp->service_parms.node_name); in ibmvfc_tgt_plogi_done()
4092 tgt->ids.port_name = wwn_to_u64(rsp->service_parms.port_name); in ibmvfc_tgt_plogi_done()
4093 tgt->ids.port_id = tgt->scsi_id; in ibmvfc_tgt_plogi_done()
4094 memcpy(&tgt->service_parms, &rsp->service_parms, in ibmvfc_tgt_plogi_done()
4095 sizeof(tgt->service_parms)); in ibmvfc_tgt_plogi_done()
4096 memcpy(&tgt->service_parms_change, &rsp->service_parms_change, in ibmvfc_tgt_plogi_done()
4097 sizeof(tgt->service_parms_change)); in ibmvfc_tgt_plogi_done()
4098 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_plogi_done()
4103 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_plogi_done()
4108 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_plogi_done()
4110 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_plogi_done()
4112 tgt_log(tgt, level, "Port Login failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_plogi_done()
4120 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_plogi_done()
4130 static void ibmvfc_tgt_send_plogi(struct ibmvfc_target *tgt) in ibmvfc_tgt_send_plogi() argument
4133 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_send_plogi()
4139 kref_get(&tgt->kref); in ibmvfc_tgt_send_plogi()
4140 tgt->logo_rcvd = 0; in ibmvfc_tgt_send_plogi()
4143 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_send_plogi()
4145 evt->tgt = tgt; in ibmvfc_tgt_send_plogi()
4150 plogi->target_wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_send_plogi()
4156 plogi->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_send_plogi()
4160 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_plogi()
4161 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_plogi()
4163 tgt_dbg(tgt, "Sent port login\n"); in ibmvfc_tgt_send_plogi()
4173 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_implicit_logout_done() local
4180 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout_done()
4184 tgt_dbg(tgt, "Implicit Logout succeeded\n"); in ibmvfc_tgt_implicit_logout_done()
4187 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_done()
4192 tgt_err(tgt, "Implicit Logout failed: rc=0x%02X\n", status); in ibmvfc_tgt_implicit_logout_done()
4196 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_implicit_logout_done()
4197 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_done()
4209 static struct ibmvfc_event *__ibmvfc_tgt_get_implicit_logout_evt(struct ibmvfc_target *tgt, in __ibmvfc_tgt_get_implicit_logout_evt() argument
4213 struct ibmvfc_host *vhost = tgt->vhost; in __ibmvfc_tgt_get_implicit_logout_evt()
4216 kref_get(&tgt->kref); in __ibmvfc_tgt_get_implicit_logout_evt()
4219 evt->tgt = tgt; in __ibmvfc_tgt_get_implicit_logout_evt()
4225 mad->old_scsi_id = cpu_to_be64(tgt->scsi_id); in __ibmvfc_tgt_get_implicit_logout_evt()
4234 static void ibmvfc_tgt_implicit_logout(struct ibmvfc_target *tgt) in ibmvfc_tgt_implicit_logout() argument
4236 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_implicit_logout()
4243 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt, in ibmvfc_tgt_implicit_logout()
4246 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_implicit_logout()
4249 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout()
4250 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout()
4252 tgt_dbg(tgt, "Sent Implicit Logout\n"); in ibmvfc_tgt_implicit_logout()
4262 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_implicit_logout_and_del_done() local
4278 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del_done()
4280 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT); in ibmvfc_tgt_implicit_logout_and_del_done()
4282 tgt_dbg(tgt, "Implicit Logout %s\n", (status == IBMVFC_MAD_SUCCESS) ? "succeeded" : "failed"); in ibmvfc_tgt_implicit_logout_and_del_done()
4283 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_and_del_done()
4292 static void ibmvfc_tgt_implicit_logout_and_del(struct ibmvfc_target *tgt) in ibmvfc_tgt_implicit_logout_and_del() argument
4294 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_implicit_logout_and_del()
4298 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del()
4306 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt, in ibmvfc_tgt_implicit_logout_and_del()
4309 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT); in ibmvfc_tgt_implicit_logout_and_del()
4312 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del()
4313 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_and_del()
4315 tgt_dbg(tgt, "Sent Implicit Logout\n"); in ibmvfc_tgt_implicit_logout_and_del()
4325 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_move_login_done() local
4332 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_move_login_done()
4335 tgt_dbg(tgt, "Move Login succeeded for new scsi_id: %llX\n", tgt->new_scsi_id); in ibmvfc_tgt_move_login_done()
4336 tgt->ids.node_name = wwn_to_u64(rsp->service_parms.node_name); in ibmvfc_tgt_move_login_done()
4337 tgt->ids.port_name = wwn_to_u64(rsp->service_parms.port_name); in ibmvfc_tgt_move_login_done()
4338 tgt->scsi_id = tgt->new_scsi_id; in ibmvfc_tgt_move_login_done()
4339 tgt->ids.port_id = tgt->scsi_id; in ibmvfc_tgt_move_login_done()
4340 memcpy(&tgt->service_parms, &rsp->service_parms, in ibmvfc_tgt_move_login_done()
4341 sizeof(tgt->service_parms)); in ibmvfc_tgt_move_login_done()
4342 memcpy(&tgt->service_parms_change, &rsp->service_parms_change, in ibmvfc_tgt_move_login_done()
4343 sizeof(tgt->service_parms_change)); in ibmvfc_tgt_move_login_done()
4344 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_move_login_done()
4349 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_move_login); in ibmvfc_tgt_move_login_done()
4353 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_move_login); in ibmvfc_tgt_move_login_done()
4355 tgt_log(tgt, level, in ibmvfc_tgt_move_login_done()
4357 tgt->new_scsi_id, be32_to_cpu(rsp->flags), be16_to_cpu(rsp->vios_flags), in ibmvfc_tgt_move_login_done()
4362 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login_done()
4373 static void ibmvfc_tgt_move_login(struct ibmvfc_target *tgt) in ibmvfc_tgt_move_login() argument
4375 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_move_login()
4382 kref_get(&tgt->kref); in ibmvfc_tgt_move_login()
4385 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_move_login()
4387 evt->tgt = tgt; in ibmvfc_tgt_move_login()
4394 move->old_scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_move_login()
4395 move->new_scsi_id = cpu_to_be64(tgt->new_scsi_id); in ibmvfc_tgt_move_login()
4396 move->wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_move_login()
4397 move->node_name = cpu_to_be64(tgt->ids.node_name); in ibmvfc_tgt_move_login()
4401 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_move_login()
4402 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login()
4404 tgt_dbg(tgt, "Sent Move Login for new scsi_id: %llX\n", tgt->new_scsi_id); in ibmvfc_tgt_move_login()
4416 struct ibmvfc_target *tgt) in ibmvfc_adisc_needs_plogi() argument
4418 if (wwn_to_u64((u8 *)&mad->fc_iu.response[2]) != tgt->ids.port_name) in ibmvfc_adisc_needs_plogi()
4420 if (wwn_to_u64((u8 *)&mad->fc_iu.response[4]) != tgt->ids.node_name) in ibmvfc_adisc_needs_plogi()
4422 if (be32_to_cpu(mad->fc_iu.response[6]) != tgt->scsi_id) in ibmvfc_adisc_needs_plogi()
4434 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_adisc_done() local
4441 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc_done()
4442 del_timer(&tgt->timer); in ibmvfc_tgt_adisc_done()
4446 tgt_dbg(tgt, "ADISC succeeded\n"); in ibmvfc_tgt_adisc_done()
4447 if (ibmvfc_adisc_needs_plogi(mad, tgt)) in ibmvfc_tgt_adisc_done()
4448 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_adisc_done()
4454 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_adisc_done()
4457 tgt_info(tgt, "ADISC failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_adisc_done()
4465 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc_done()
4511 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_adisc_cancel_done() local
4513 tgt_dbg(tgt, "ADISC cancel complete\n"); in ibmvfc_tgt_adisc_cancel_done()
4516 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc_cancel_done()
4530 struct ibmvfc_target *tgt = from_timer(tgt, t, timer); in ibmvfc_adisc_timeout() local
4531 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_adisc_timeout()
4537 tgt_dbg(tgt, "ADISC timeout\n"); in ibmvfc_adisc_timeout()
4540 tgt->action != IBMVFC_TGT_ACTION_INIT_WAIT || in ibmvfc_adisc_timeout()
4548 kref_get(&tgt->kref); in ibmvfc_adisc_timeout()
4552 evt->tgt = tgt; in ibmvfc_adisc_timeout()
4557 tmf->target_wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_adisc_timeout()
4563 tmf->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_adisc_timeout()
4564 tmf->cancel_key = cpu_to_be32(tgt->cancel_key); in ibmvfc_adisc_timeout()
4569 tgt_err(tgt, "Failed to send cancel event for ADISC. rc=%d\n", rc); in ibmvfc_adisc_timeout()
4571 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_adisc_timeout()
4574 tgt_dbg(tgt, "Attempting to cancel ADISC\n"); in ibmvfc_adisc_timeout()
4589 static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) in ibmvfc_tgt_adisc() argument
4592 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_adisc()
4598 kref_get(&tgt->kref); in ibmvfc_tgt_adisc()
4602 evt->tgt = tgt; in ibmvfc_tgt_adisc()
4607 mad->iu.scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_adisc()
4608 mad->iu.cancel_key = cpu_to_be32(tgt->cancel_key); in ibmvfc_tgt_adisc()
4617 if (timer_pending(&tgt->timer)) in ibmvfc_tgt_adisc()
4618 mod_timer(&tgt->timer, jiffies + (IBMVFC_ADISC_TIMEOUT * HZ)); in ibmvfc_tgt_adisc()
4620 tgt->timer.expires = jiffies + (IBMVFC_ADISC_TIMEOUT * HZ); in ibmvfc_tgt_adisc()
4621 add_timer(&tgt->timer); in ibmvfc_tgt_adisc()
4624 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_adisc()
4627 del_timer(&tgt->timer); in ibmvfc_tgt_adisc()
4628 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc()
4629 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc()
4631 tgt_dbg(tgt, "Sent ADISC\n"); in ibmvfc_tgt_adisc()
4641 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_query_target_done() local
4648 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target_done()
4651 tgt_dbg(tgt, "Query Target succeeded\n"); in ibmvfc_tgt_query_target_done()
4652 if (be64_to_cpu(rsp->scsi_id) != tgt->scsi_id) in ibmvfc_tgt_query_target_done()
4653 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4655 ibmvfc_init_tgt(tgt, ibmvfc_tgt_adisc); in ibmvfc_tgt_query_target_done()
4660 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target); in ibmvfc_tgt_query_target_done()
4667 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4669 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target); in ibmvfc_tgt_query_target_done()
4671 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4673 tgt_log(tgt, level, "Query Target failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_query_target_done()
4682 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target_done()
4692 static void ibmvfc_tgt_query_target(struct ibmvfc_target *tgt) in ibmvfc_tgt_query_target() argument
4695 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_query_target()
4701 kref_get(&tgt->kref); in ibmvfc_tgt_query_target()
4704 evt->tgt = tgt; in ibmvfc_tgt_query_target()
4711 query_tgt->wwpn = cpu_to_be64(tgt->ids.port_name); in ibmvfc_tgt_query_target()
4713 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_query_target()
4716 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target()
4717 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target()
4719 tgt_dbg(tgt, "Sent Query Target\n"); in ibmvfc_tgt_query_target()
4735 struct ibmvfc_target *tgt; in ibmvfc_alloc_target() local
4742 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_alloc_target()
4743 if (tgt->wwpn == wwpn) { in ibmvfc_alloc_target()
4744 wtgt = tgt; in ibmvfc_alloc_target()
4749 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_alloc_target()
4750 if (tgt->scsi_id == scsi_id) { in ibmvfc_alloc_target()
4751 stgt = tgt; in ibmvfc_alloc_target()
4789 if (tgt->need_login) in ibmvfc_alloc_target()
4790 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); in ibmvfc_alloc_target()
4795 tgt = mempool_alloc(vhost->tgt_pool, GFP_NOIO); in ibmvfc_alloc_target()
4796 memset(tgt, 0, sizeof(*tgt)); in ibmvfc_alloc_target()
4797 tgt->scsi_id = scsi_id; in ibmvfc_alloc_target()
4798 tgt->wwpn = wwpn; in ibmvfc_alloc_target()
4799 tgt->vhost = vhost; in ibmvfc_alloc_target()
4800 tgt->need_login = 1; in ibmvfc_alloc_target()
4801 timer_setup(&tgt->timer, ibmvfc_adisc_timeout, 0); in ibmvfc_alloc_target()
4802 kref_init(&tgt->kref); in ibmvfc_alloc_target()
4803 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); in ibmvfc_alloc_target()
4805 tgt->cancel_key = vhost->task_set++; in ibmvfc_alloc_target()
4806 list_add_tail(&tgt->queue, &vhost->targets); in ibmvfc_alloc_target()
5226 struct ibmvfc_target *tgt; in ibmvfc_dev_init_to_do() local
5228 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_dev_init_to_do()
5229 if (tgt->action == IBMVFC_TGT_ACTION_INIT || in ibmvfc_dev_init_to_do()
5230 tgt->action == IBMVFC_TGT_ACTION_INIT_WAIT) in ibmvfc_dev_init_to_do()
5246 struct ibmvfc_target *tgt; in ibmvfc_dev_logo_to_do() local
5248 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_dev_logo_to_do()
5249 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT || in ibmvfc_dev_logo_to_do()
5250 tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT) in ibmvfc_dev_logo_to_do()
5265 struct ibmvfc_target *tgt; in __ibmvfc_work_to_do() local
5278 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5279 if (tgt->action == IBMVFC_TGT_ACTION_INIT) in __ibmvfc_work_to_do()
5281 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5282 if (tgt->action == IBMVFC_TGT_ACTION_INIT_WAIT) in __ibmvfc_work_to_do()
5289 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5290 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) in __ibmvfc_work_to_do()
5292 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5293 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT) in __ibmvfc_work_to_do()
5350 static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) in ibmvfc_tgt_add_rport() argument
5352 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_add_rport()
5356 tgt_dbg(tgt, "Adding rport\n"); in ibmvfc_tgt_add_rport()
5357 rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); in ibmvfc_tgt_add_rport()
5360 if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) { in ibmvfc_tgt_add_rport()
5361 tgt_dbg(tgt, "Deleting rport\n"); in ibmvfc_tgt_add_rport()
5362 list_del(&tgt->queue); in ibmvfc_tgt_add_rport()
5363 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT); in ibmvfc_tgt_add_rport()
5366 del_timer_sync(&tgt->timer); in ibmvfc_tgt_add_rport()
5367 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_add_rport()
5369 } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) { in ibmvfc_tgt_add_rport()
5370 tgt_dbg(tgt, "Deleting rport with outstanding I/O\n"); in ibmvfc_tgt_add_rport()
5371 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT); in ibmvfc_tgt_add_rport()
5372 tgt->rport = NULL; in ibmvfc_tgt_add_rport()
5373 tgt->init_retries = 0; in ibmvfc_tgt_add_rport()
5377 } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DELETED_RPORT) { in ibmvfc_tgt_add_rport()
5383 tgt_dbg(tgt, "rport add succeeded\n"); in ibmvfc_tgt_add_rport()
5384 tgt->rport = rport; in ibmvfc_tgt_add_rport()
5385 rport->maxframe_size = be16_to_cpu(tgt->service_parms.common.bb_rcv_sz) & 0x0fff; in ibmvfc_tgt_add_rport()
5387 tgt->target_id = rport->scsi_target_id; in ibmvfc_tgt_add_rport()
5388 if (be32_to_cpu(tgt->service_parms.class1_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
5390 if (be32_to_cpu(tgt->service_parms.class2_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
5392 if (be32_to_cpu(tgt->service_parms.class3_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
5397 tgt_dbg(tgt, "rport add failed\n"); in ibmvfc_tgt_add_rport()
5408 struct ibmvfc_target *tgt; in ibmvfc_do_work() local
5482 list_for_each_entry(tgt, &vhost->targets, queue) in ibmvfc_do_work()
5483 ibmvfc_init_tgt(tgt, ibmvfc_tgt_query_target); in ibmvfc_do_work()
5487 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5488 if (tgt->action == IBMVFC_TGT_ACTION_INIT) { in ibmvfc_do_work()
5489 tgt->job_step(tgt); in ibmvfc_do_work()
5499 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5500 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) { in ibmvfc_do_work()
5501 tgt->job_step(tgt); in ibmvfc_do_work()
5511 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5512 if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) { in ibmvfc_do_work()
5513 tgt_dbg(tgt, "Deleting rport\n"); in ibmvfc_do_work()
5514 rport = tgt->rport; in ibmvfc_do_work()
5515 tgt->rport = NULL; in ibmvfc_do_work()
5516 list_del(&tgt->queue); in ibmvfc_do_work()
5517 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT); in ibmvfc_do_work()
5521 del_timer_sync(&tgt->timer); in ibmvfc_do_work()
5522 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_do_work()
5524 } else if (tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) { in ibmvfc_do_work()
5525 tgt_dbg(tgt, "Deleting rport with I/O outstanding\n"); in ibmvfc_do_work()
5526 rport = tgt->rport; in ibmvfc_do_work()
5527 tgt->rport = NULL; in ibmvfc_do_work()
5528 tgt->init_retries = 0; in ibmvfc_do_work()
5529 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT); in ibmvfc_do_work()
5541 tgt->move_login = 1; in ibmvfc_do_work()
5586 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5587 if (tgt->action == IBMVFC_TGT_ACTION_INIT) { in ibmvfc_do_work()
5588 tgt->job_step(tgt); in ibmvfc_do_work()
6059 struct ibmvfc_target *tgt; in ibmvfc_rport_add_thread() local
6071 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_rport_add_thread()
6072 if (tgt->add_rport) { in ibmvfc_rport_add_thread()
6074 tgt->add_rport = 0; in ibmvfc_rport_add_thread()
6075 kref_get(&tgt->kref); in ibmvfc_rport_add_thread()
6076 rport = tgt->rport; in ibmvfc_rport_add_thread()
6079 ibmvfc_tgt_add_rport(tgt); in ibmvfc_rport_add_thread()
6082 tgt_dbg(tgt, "Setting rport roles\n"); in ibmvfc_rport_add_thread()
6083 fc_remote_port_rolechg(rport, tgt->ids.roles); in ibmvfc_rport_add_thread()
6089 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_rport_add_thread()