Lines Matching refs:tgt
501 static int ibmvfc_set_tgt_action(struct ibmvfc_target *tgt, in ibmvfc_set_tgt_action() argument
506 switch (tgt->action) { in ibmvfc_set_tgt_action()
510 tgt->action = action; in ibmvfc_set_tgt_action()
517 tgt->action = action; in ibmvfc_set_tgt_action()
523 tgt->action = action; in ibmvfc_set_tgt_action()
529 tgt->action = action; in ibmvfc_set_tgt_action()
535 tgt->action = action; in ibmvfc_set_tgt_action()
542 tgt->action = action; in ibmvfc_set_tgt_action()
548 tgt->add_rport = 0; in ibmvfc_set_tgt_action()
663 static void ibmvfc_del_tgt(struct ibmvfc_target *tgt) in ibmvfc_del_tgt() argument
665 if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT)) { in ibmvfc_del_tgt()
666 tgt->job_step = ibmvfc_tgt_implicit_logout_and_del; in ibmvfc_del_tgt()
667 tgt->init_retries = 0; in ibmvfc_del_tgt()
669 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_del_tgt()
681 struct ibmvfc_target *tgt; in ibmvfc_link_down() local
685 list_for_each_entry(tgt, &vhost->targets, queue) in ibmvfc_link_down()
686 ibmvfc_del_tgt(tgt); in ibmvfc_link_down()
703 struct ibmvfc_target *tgt; in ibmvfc_init_host() local
718 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_init_host()
720 tgt->need_login = 1; in ibmvfc_init_host()
722 ibmvfc_del_tgt(tgt); in ibmvfc_init_host()
1233 struct ibmvfc_target *tgt; in __ibmvfc_get_target() local
1235 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_get_target()
1236 if (tgt->target_id == starget->id) { in __ibmvfc_get_target()
1237 kref_get(&tgt->kref); in __ibmvfc_get_target()
1238 return tgt; in __ibmvfc_get_target()
1253 struct ibmvfc_target *tgt; in ibmvfc_get_target() local
1257 tgt = __ibmvfc_get_target(starget); in ibmvfc_get_target()
1259 return tgt; in ibmvfc_get_target()
1368 struct ibmvfc_target *tgt = container_of(kref, struct ibmvfc_target, kref); in ibmvfc_release_tgt() local
1369 kfree(tgt); in ibmvfc_release_tgt()
1381 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_node_name() local
1382 fc_starget_port_name(starget) = tgt ? tgt->ids.node_name : 0; in ibmvfc_get_starget_node_name()
1383 if (tgt) in ibmvfc_get_starget_node_name()
1384 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_node_name()
1396 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_port_name() local
1397 fc_starget_port_name(starget) = tgt ? tgt->ids.port_name : 0; in ibmvfc_get_starget_port_name()
1398 if (tgt) in ibmvfc_get_starget_port_name()
1399 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_port_name()
1411 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_port_id() local
1412 fc_starget_port_id(starget) = tgt ? tgt->scsi_id : -1; in ibmvfc_get_starget_port_id()
1413 if (tgt) in ibmvfc_get_starget_port_id()
1414 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_port_id()
1831 struct ibmvfc_target *tgt; in ibmvfc_relogin() local
1835 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_relogin()
1836 if (rport == tgt->rport) { in ibmvfc_relogin()
1837 ibmvfc_del_tgt(tgt); in ibmvfc_relogin()
2124 struct ibmvfc_target *tgt; in ibmvfc_bsg_plogi() local
2132 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_bsg_plogi()
2133 if (tgt->scsi_id == port_id) { in ibmvfc_bsg_plogi()
3085 struct ibmvfc_target *tgt; in ibmvfc_terminate_rport_io() local
3104 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_terminate_rport_io()
3105 if (tgt->scsi_id == rport->port_id) { in ibmvfc_terminate_rport_io()
3111 if (found && tgt->action == IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT) { in ibmvfc_terminate_rport_io()
3117 ibmvfc_del_tgt(tgt); in ibmvfc_terminate_rport_io()
3197 struct ibmvfc_target *tgt; in ibmvfc_handle_async() local
3244 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_handle_async()
3247 if (crq->scsi_id && cpu_to_be64(tgt->scsi_id) != crq->scsi_id) in ibmvfc_handle_async()
3249 if (crq->wwpn && cpu_to_be64(tgt->ids.port_name) != crq->wwpn) in ibmvfc_handle_async()
3251 if (crq->node_name && cpu_to_be64(tgt->ids.node_name) != crq->node_name) in ibmvfc_handle_async()
3253 if (tgt->need_login && be64_to_cpu(crq->event) == IBMVFC_AE_ELS_LOGO) in ibmvfc_handle_async()
3254 tgt->logo_rcvd = 1; in ibmvfc_handle_async()
3255 if (!tgt->need_login || be64_to_cpu(crq->event) == IBMVFC_AE_ELS_PLOGI) { in ibmvfc_handle_async()
3256 ibmvfc_del_tgt(tgt); in ibmvfc_handle_async()
3964 static void ibmvfc_init_tgt(struct ibmvfc_target *tgt, in ibmvfc_init_tgt() argument
3967 if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT)) in ibmvfc_init_tgt()
3968 tgt->job_step = job_step; in ibmvfc_init_tgt()
3969 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_init_tgt()
3980 static int ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt, in ibmvfc_retry_tgt_init() argument
3983 if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) { in ibmvfc_retry_tgt_init()
3984 ibmvfc_del_tgt(tgt); in ibmvfc_retry_tgt_init()
3985 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_retry_tgt_init()
3988 ibmvfc_init_tgt(tgt, job_step); in ibmvfc_retry_tgt_init()
4033 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_prli_done() local
4041 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_prli_done()
4044 tgt_dbg(tgt, "Process Login succeeded: %X %02X %04X\n", in ibmvfc_tgt_prli_done()
4051 tgt->need_login = 0; in ibmvfc_tgt_prli_done()
4052 tgt->ids.roles = 0; in ibmvfc_tgt_prli_done()
4054 tgt->ids.roles |= FC_PORT_ROLE_FCP_TARGET; in ibmvfc_tgt_prli_done()
4056 tgt->ids.roles |= FC_PORT_ROLE_FCP_INITIATOR; in ibmvfc_tgt_prli_done()
4057 tgt->add_rport = 1; in ibmvfc_tgt_prli_done()
4059 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
4061 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
4063 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
4065 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
4070 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
4076 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_prli_done()
4077 else if (tgt->logo_rcvd) in ibmvfc_tgt_prli_done()
4078 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_prli_done()
4080 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
4082 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
4084 tgt_log(tgt, level, "Process Login failed: %s (%x:%x) rc=0x%02X\n", in ibmvfc_tgt_prli_done()
4090 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_prli_done()
4100 static void ibmvfc_tgt_send_prli(struct ibmvfc_target *tgt) in ibmvfc_tgt_send_prli() argument
4103 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_send_prli()
4109 kref_get(&tgt->kref); in ibmvfc_tgt_send_prli()
4112 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_prli()
4113 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_prli()
4119 evt->tgt = tgt; in ibmvfc_tgt_send_prli()
4124 prli->target_wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_send_prli()
4130 prli->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_send_prli()
4140 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_send_prli()
4143 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_prli()
4144 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_prli()
4146 tgt_dbg(tgt, "Sent process login\n"); in ibmvfc_tgt_send_prli()
4156 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_plogi_done() local
4163 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_plogi_done()
4166 tgt_dbg(tgt, "Port Login succeeded\n"); in ibmvfc_tgt_plogi_done()
4167 if (tgt->ids.port_name && in ibmvfc_tgt_plogi_done()
4168 tgt->ids.port_name != wwn_to_u64(rsp->service_parms.port_name)) { in ibmvfc_tgt_plogi_done()
4170 tgt_dbg(tgt, "Port re-init required\n"); in ibmvfc_tgt_plogi_done()
4173 tgt->ids.node_name = wwn_to_u64(rsp->service_parms.node_name); in ibmvfc_tgt_plogi_done()
4174 tgt->ids.port_name = wwn_to_u64(rsp->service_parms.port_name); in ibmvfc_tgt_plogi_done()
4175 tgt->ids.port_id = tgt->scsi_id; in ibmvfc_tgt_plogi_done()
4176 memcpy(&tgt->service_parms, &rsp->service_parms, in ibmvfc_tgt_plogi_done()
4177 sizeof(tgt->service_parms)); in ibmvfc_tgt_plogi_done()
4178 memcpy(&tgt->service_parms_change, &rsp->service_parms_change, in ibmvfc_tgt_plogi_done()
4179 sizeof(tgt->service_parms_change)); in ibmvfc_tgt_plogi_done()
4180 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_plogi_done()
4185 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_plogi_done()
4190 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_plogi_done()
4192 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_plogi_done()
4194 tgt_log(tgt, level, "Port Login failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_plogi_done()
4202 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_plogi_done()
4212 static void ibmvfc_tgt_send_plogi(struct ibmvfc_target *tgt) in ibmvfc_tgt_send_plogi() argument
4215 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_send_plogi()
4221 kref_get(&tgt->kref); in ibmvfc_tgt_send_plogi()
4222 tgt->logo_rcvd = 0; in ibmvfc_tgt_send_plogi()
4225 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_plogi()
4226 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_plogi()
4231 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_send_plogi()
4233 evt->tgt = tgt; in ibmvfc_tgt_send_plogi()
4238 plogi->target_wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_send_plogi()
4244 plogi->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_send_plogi()
4248 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_plogi()
4249 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_plogi()
4251 tgt_dbg(tgt, "Sent port login\n"); in ibmvfc_tgt_send_plogi()
4261 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_implicit_logout_done() local
4268 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout_done()
4272 tgt_dbg(tgt, "Implicit Logout succeeded\n"); in ibmvfc_tgt_implicit_logout_done()
4275 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_done()
4280 tgt_err(tgt, "Implicit Logout failed: rc=0x%02X\n", status); in ibmvfc_tgt_implicit_logout_done()
4284 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_implicit_logout_done()
4285 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_done()
4297 static struct ibmvfc_event *__ibmvfc_tgt_get_implicit_logout_evt(struct ibmvfc_target *tgt, in __ibmvfc_tgt_get_implicit_logout_evt() argument
4301 struct ibmvfc_host *vhost = tgt->vhost; in __ibmvfc_tgt_get_implicit_logout_evt()
4304 kref_get(&tgt->kref); in __ibmvfc_tgt_get_implicit_logout_evt()
4309 evt->tgt = tgt; in __ibmvfc_tgt_get_implicit_logout_evt()
4315 mad->old_scsi_id = cpu_to_be64(tgt->scsi_id); in __ibmvfc_tgt_get_implicit_logout_evt()
4324 static void ibmvfc_tgt_implicit_logout(struct ibmvfc_target *tgt) in ibmvfc_tgt_implicit_logout() argument
4326 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_implicit_logout()
4333 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt, in ibmvfc_tgt_implicit_logout()
4337 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout()
4338 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout()
4343 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_implicit_logout()
4346 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout()
4347 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout()
4349 tgt_dbg(tgt, "Sent Implicit Logout\n"); in ibmvfc_tgt_implicit_logout()
4359 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_implicit_logout_and_del_done() local
4375 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del_done()
4377 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT); in ibmvfc_tgt_implicit_logout_and_del_done()
4379 tgt_dbg(tgt, "Implicit Logout %s\n", (status == IBMVFC_MAD_SUCCESS) ? "succeeded" : "failed"); in ibmvfc_tgt_implicit_logout_and_del_done()
4380 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_and_del_done()
4389 static void ibmvfc_tgt_implicit_logout_and_del(struct ibmvfc_target *tgt) in ibmvfc_tgt_implicit_logout_and_del() argument
4391 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_implicit_logout_and_del()
4395 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del()
4403 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt, in ibmvfc_tgt_implicit_logout_and_del()
4406 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT); in ibmvfc_tgt_implicit_logout_and_del()
4409 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del()
4410 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_and_del()
4412 tgt_dbg(tgt, "Sent Implicit Logout\n"); in ibmvfc_tgt_implicit_logout_and_del()
4422 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_move_login_done() local
4429 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_move_login_done()
4432 tgt_dbg(tgt, "Move Login succeeded for new scsi_id: %llX\n", tgt->new_scsi_id); in ibmvfc_tgt_move_login_done()
4433 tgt->ids.node_name = wwn_to_u64(rsp->service_parms.node_name); in ibmvfc_tgt_move_login_done()
4434 tgt->ids.port_name = wwn_to_u64(rsp->service_parms.port_name); in ibmvfc_tgt_move_login_done()
4435 tgt->scsi_id = tgt->new_scsi_id; in ibmvfc_tgt_move_login_done()
4436 tgt->ids.port_id = tgt->scsi_id; in ibmvfc_tgt_move_login_done()
4437 memcpy(&tgt->service_parms, &rsp->service_parms, in ibmvfc_tgt_move_login_done()
4438 sizeof(tgt->service_parms)); in ibmvfc_tgt_move_login_done()
4439 memcpy(&tgt->service_parms_change, &rsp->service_parms_change, in ibmvfc_tgt_move_login_done()
4440 sizeof(tgt->service_parms_change)); in ibmvfc_tgt_move_login_done()
4441 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_move_login_done()
4446 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_move_login); in ibmvfc_tgt_move_login_done()
4450 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_move_login); in ibmvfc_tgt_move_login_done()
4452 tgt_log(tgt, level, in ibmvfc_tgt_move_login_done()
4454 tgt->new_scsi_id, be32_to_cpu(rsp->flags), be16_to_cpu(rsp->vios_flags), in ibmvfc_tgt_move_login_done()
4459 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login_done()
4470 static void ibmvfc_tgt_move_login(struct ibmvfc_target *tgt) in ibmvfc_tgt_move_login() argument
4472 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_move_login()
4479 kref_get(&tgt->kref); in ibmvfc_tgt_move_login()
4482 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_move_login()
4483 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login()
4488 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_move_login()
4490 evt->tgt = tgt; in ibmvfc_tgt_move_login()
4497 move->old_scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_move_login()
4498 move->new_scsi_id = cpu_to_be64(tgt->new_scsi_id); in ibmvfc_tgt_move_login()
4499 move->wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_move_login()
4500 move->node_name = cpu_to_be64(tgt->ids.node_name); in ibmvfc_tgt_move_login()
4504 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_move_login()
4505 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login()
4507 tgt_dbg(tgt, "Sent Move Login for new scsi_id: %llX\n", tgt->new_scsi_id); in ibmvfc_tgt_move_login()
4519 struct ibmvfc_target *tgt) in ibmvfc_adisc_needs_plogi() argument
4521 if (wwn_to_u64((u8 *)&mad->fc_iu.response[2]) != tgt->ids.port_name) in ibmvfc_adisc_needs_plogi()
4523 if (wwn_to_u64((u8 *)&mad->fc_iu.response[4]) != tgt->ids.node_name) in ibmvfc_adisc_needs_plogi()
4525 if (be32_to_cpu(mad->fc_iu.response[6]) != tgt->scsi_id) in ibmvfc_adisc_needs_plogi()
4537 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_adisc_done() local
4544 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc_done()
4545 del_timer(&tgt->timer); in ibmvfc_tgt_adisc_done()
4549 tgt_dbg(tgt, "ADISC succeeded\n"); in ibmvfc_tgt_adisc_done()
4550 if (ibmvfc_adisc_needs_plogi(mad, tgt)) in ibmvfc_tgt_adisc_done()
4551 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_adisc_done()
4557 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_adisc_done()
4560 tgt_info(tgt, "ADISC failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_adisc_done()
4568 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc_done()
4614 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_adisc_cancel_done() local
4616 tgt_dbg(tgt, "ADISC cancel complete\n"); in ibmvfc_tgt_adisc_cancel_done()
4619 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc_cancel_done()
4633 struct ibmvfc_target *tgt = from_timer(tgt, t, timer); in ibmvfc_adisc_timeout() local
4634 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_adisc_timeout()
4640 tgt_dbg(tgt, "ADISC timeout\n"); in ibmvfc_adisc_timeout()
4643 tgt->action != IBMVFC_TGT_ACTION_INIT_WAIT || in ibmvfc_adisc_timeout()
4651 kref_get(&tgt->kref); in ibmvfc_adisc_timeout()
4654 tgt_err(tgt, "Failed to get cancel event for ADISC.\n"); in ibmvfc_adisc_timeout()
4656 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_adisc_timeout()
4663 evt->tgt = tgt; in ibmvfc_adisc_timeout()
4668 tmf->target_wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_adisc_timeout()
4674 tmf->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_adisc_timeout()
4675 tmf->cancel_key = cpu_to_be32(tgt->cancel_key); in ibmvfc_adisc_timeout()
4680 tgt_err(tgt, "Failed to send cancel event for ADISC. rc=%d\n", rc); in ibmvfc_adisc_timeout()
4682 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_adisc_timeout()
4685 tgt_dbg(tgt, "Attempting to cancel ADISC\n"); in ibmvfc_adisc_timeout()
4700 static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) in ibmvfc_tgt_adisc() argument
4703 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_adisc()
4709 kref_get(&tgt->kref); in ibmvfc_tgt_adisc()
4712 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc()
4713 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc()
4719 evt->tgt = tgt; in ibmvfc_tgt_adisc()
4724 mad->iu.scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_adisc()
4725 mad->iu.cancel_key = cpu_to_be32(tgt->cancel_key); in ibmvfc_tgt_adisc()
4734 if (timer_pending(&tgt->timer)) in ibmvfc_tgt_adisc()
4735 mod_timer(&tgt->timer, jiffies + (IBMVFC_ADISC_TIMEOUT * HZ)); in ibmvfc_tgt_adisc()
4737 tgt->timer.expires = jiffies + (IBMVFC_ADISC_TIMEOUT * HZ); in ibmvfc_tgt_adisc()
4738 add_timer(&tgt->timer); in ibmvfc_tgt_adisc()
4741 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_adisc()
4744 del_timer(&tgt->timer); in ibmvfc_tgt_adisc()
4745 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc()
4746 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc()
4748 tgt_dbg(tgt, "Sent ADISC\n"); in ibmvfc_tgt_adisc()
4758 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_query_target_done() local
4765 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target_done()
4768 tgt_dbg(tgt, "Query Target succeeded\n"); in ibmvfc_tgt_query_target_done()
4769 if (be64_to_cpu(rsp->scsi_id) != tgt->scsi_id) in ibmvfc_tgt_query_target_done()
4770 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4772 ibmvfc_init_tgt(tgt, ibmvfc_tgt_adisc); in ibmvfc_tgt_query_target_done()
4777 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target); in ibmvfc_tgt_query_target_done()
4784 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4786 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target); in ibmvfc_tgt_query_target_done()
4788 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4790 tgt_log(tgt, level, "Query Target failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_query_target_done()
4799 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target_done()
4809 static void ibmvfc_tgt_query_target(struct ibmvfc_target *tgt) in ibmvfc_tgt_query_target() argument
4812 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_query_target()
4818 kref_get(&tgt->kref); in ibmvfc_tgt_query_target()
4821 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target()
4822 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target()
4827 evt->tgt = tgt; in ibmvfc_tgt_query_target()
4834 query_tgt->wwpn = cpu_to_be64(tgt->ids.port_name); in ibmvfc_tgt_query_target()
4836 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_query_target()
4839 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target()
4840 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target()
4842 tgt_dbg(tgt, "Sent Query Target\n"); in ibmvfc_tgt_query_target()
4858 struct ibmvfc_target *tgt; in ibmvfc_alloc_target() local
4865 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_alloc_target()
4866 if (tgt->wwpn == wwpn) { in ibmvfc_alloc_target()
4867 wtgt = tgt; in ibmvfc_alloc_target()
4872 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_alloc_target()
4873 if (tgt->scsi_id == scsi_id) { in ibmvfc_alloc_target()
4874 stgt = tgt; in ibmvfc_alloc_target()
4912 if (tgt->need_login) in ibmvfc_alloc_target()
4913 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); in ibmvfc_alloc_target()
4918 tgt = mempool_alloc(vhost->tgt_pool, GFP_NOIO); in ibmvfc_alloc_target()
4919 memset(tgt, 0, sizeof(*tgt)); in ibmvfc_alloc_target()
4920 tgt->scsi_id = scsi_id; in ibmvfc_alloc_target()
4921 tgt->wwpn = wwpn; in ibmvfc_alloc_target()
4922 tgt->vhost = vhost; in ibmvfc_alloc_target()
4923 tgt->need_login = 1; in ibmvfc_alloc_target()
4924 timer_setup(&tgt->timer, ibmvfc_adisc_timeout, 0); in ibmvfc_alloc_target()
4925 kref_init(&tgt->kref); in ibmvfc_alloc_target()
4926 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); in ibmvfc_alloc_target()
4928 tgt->cancel_key = vhost->task_set++; in ibmvfc_alloc_target()
4929 list_add_tail(&tgt->queue, &vhost->targets); in ibmvfc_alloc_target()
5382 struct ibmvfc_target *tgt; in ibmvfc_dev_init_to_do() local
5384 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_dev_init_to_do()
5385 if (tgt->action == IBMVFC_TGT_ACTION_INIT || in ibmvfc_dev_init_to_do()
5386 tgt->action == IBMVFC_TGT_ACTION_INIT_WAIT) in ibmvfc_dev_init_to_do()
5402 struct ibmvfc_target *tgt; in ibmvfc_dev_logo_to_do() local
5404 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_dev_logo_to_do()
5405 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT || in ibmvfc_dev_logo_to_do()
5406 tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT) in ibmvfc_dev_logo_to_do()
5421 struct ibmvfc_target *tgt; in __ibmvfc_work_to_do() local
5434 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5435 if (tgt->action == IBMVFC_TGT_ACTION_INIT) in __ibmvfc_work_to_do()
5437 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5438 if (tgt->action == IBMVFC_TGT_ACTION_INIT_WAIT) in __ibmvfc_work_to_do()
5445 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5446 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) in __ibmvfc_work_to_do()
5448 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
5449 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT) in __ibmvfc_work_to_do()
5506 static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) in ibmvfc_tgt_add_rport() argument
5508 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_add_rport()
5512 tgt_dbg(tgt, "Adding rport\n"); in ibmvfc_tgt_add_rport()
5513 rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); in ibmvfc_tgt_add_rport()
5516 if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) { in ibmvfc_tgt_add_rport()
5517 tgt_dbg(tgt, "Deleting rport\n"); in ibmvfc_tgt_add_rport()
5518 list_del(&tgt->queue); in ibmvfc_tgt_add_rport()
5519 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT); in ibmvfc_tgt_add_rport()
5522 del_timer_sync(&tgt->timer); in ibmvfc_tgt_add_rport()
5523 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_add_rport()
5525 } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) { in ibmvfc_tgt_add_rport()
5526 tgt_dbg(tgt, "Deleting rport with outstanding I/O\n"); in ibmvfc_tgt_add_rport()
5527 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT); in ibmvfc_tgt_add_rport()
5528 tgt->rport = NULL; in ibmvfc_tgt_add_rport()
5529 tgt->init_retries = 0; in ibmvfc_tgt_add_rport()
5533 } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DELETED_RPORT) { in ibmvfc_tgt_add_rport()
5539 tgt_dbg(tgt, "rport add succeeded\n"); in ibmvfc_tgt_add_rport()
5540 tgt->rport = rport; in ibmvfc_tgt_add_rport()
5541 rport->maxframe_size = be16_to_cpu(tgt->service_parms.common.bb_rcv_sz) & 0x0fff; in ibmvfc_tgt_add_rport()
5543 tgt->target_id = rport->scsi_target_id; in ibmvfc_tgt_add_rport()
5544 if (be32_to_cpu(tgt->service_parms.class1_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
5546 if (be32_to_cpu(tgt->service_parms.class2_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
5548 if (be32_to_cpu(tgt->service_parms.class3_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
5551 tgt_dbg(tgt, "rport add failed\n"); in ibmvfc_tgt_add_rport()
5562 struct ibmvfc_target *tgt; in ibmvfc_do_work() local
5636 list_for_each_entry(tgt, &vhost->targets, queue) in ibmvfc_do_work()
5637 ibmvfc_init_tgt(tgt, ibmvfc_tgt_query_target); in ibmvfc_do_work()
5641 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5642 if (tgt->action == IBMVFC_TGT_ACTION_INIT) { in ibmvfc_do_work()
5643 tgt->job_step(tgt); in ibmvfc_do_work()
5653 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5654 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) { in ibmvfc_do_work()
5655 tgt->job_step(tgt); in ibmvfc_do_work()
5665 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5666 if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) { in ibmvfc_do_work()
5667 tgt_dbg(tgt, "Deleting rport\n"); in ibmvfc_do_work()
5668 rport = tgt->rport; in ibmvfc_do_work()
5669 tgt->rport = NULL; in ibmvfc_do_work()
5670 list_del(&tgt->queue); in ibmvfc_do_work()
5671 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT); in ibmvfc_do_work()
5675 del_timer_sync(&tgt->timer); in ibmvfc_do_work()
5676 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_do_work()
5678 } else if (tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) { in ibmvfc_do_work()
5679 tgt_dbg(tgt, "Deleting rport with I/O outstanding\n"); in ibmvfc_do_work()
5680 rport = tgt->rport; in ibmvfc_do_work()
5681 tgt->rport = NULL; in ibmvfc_do_work()
5682 tgt->init_retries = 0; in ibmvfc_do_work()
5683 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT); in ibmvfc_do_work()
5695 tgt->move_login = 1; in ibmvfc_do_work()
5740 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
5741 if (tgt->action == IBMVFC_TGT_ACTION_INIT) { in ibmvfc_do_work()
5742 tgt->job_step(tgt); in ibmvfc_do_work()
6267 struct ibmvfc_target *tgt; in ibmvfc_rport_add_thread() local
6279 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_rport_add_thread()
6280 if (tgt->add_rport) { in ibmvfc_rport_add_thread()
6282 tgt->add_rport = 0; in ibmvfc_rport_add_thread()
6283 kref_get(&tgt->kref); in ibmvfc_rport_add_thread()
6284 rport = tgt->rport; in ibmvfc_rport_add_thread()
6287 ibmvfc_tgt_add_rport(tgt); in ibmvfc_rport_add_thread()
6290 tgt_dbg(tgt, "Setting rport roles\n"); in ibmvfc_rport_add_thread()
6291 fc_remote_port_rolechg(rport, tgt->ids.roles); in ibmvfc_rport_add_thread()
6297 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_rport_add_thread()