Lines Matching refs:tgt

421 static int ibmvfc_set_tgt_action(struct ibmvfc_target *tgt,  in ibmvfc_set_tgt_action()  argument
426 switch (tgt->action) { in ibmvfc_set_tgt_action()
430 tgt->action = action; in ibmvfc_set_tgt_action()
437 tgt->action = action; in ibmvfc_set_tgt_action()
443 tgt->action = action; in ibmvfc_set_tgt_action()
449 tgt->action = action; in ibmvfc_set_tgt_action()
455 tgt->action = action; in ibmvfc_set_tgt_action()
462 tgt->action = action; in ibmvfc_set_tgt_action()
468 tgt->add_rport = 0; in ibmvfc_set_tgt_action()
585 static void ibmvfc_del_tgt(struct ibmvfc_target *tgt) in ibmvfc_del_tgt() argument
587 if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT)) in ibmvfc_del_tgt()
588 tgt->job_step = ibmvfc_tgt_implicit_logout_and_del; in ibmvfc_del_tgt()
589 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_del_tgt()
601 struct ibmvfc_target *tgt; in ibmvfc_link_down() local
605 list_for_each_entry(tgt, &vhost->targets, queue) in ibmvfc_link_down()
606 ibmvfc_del_tgt(tgt); in ibmvfc_link_down()
623 struct ibmvfc_target *tgt; in ibmvfc_init_host() local
638 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_init_host()
640 tgt->need_login = 1; in ibmvfc_init_host()
642 ibmvfc_del_tgt(tgt); in ibmvfc_init_host()
964 struct ibmvfc_target *tgt; in __ibmvfc_get_target() local
966 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_get_target()
967 if (tgt->target_id == starget->id) { in __ibmvfc_get_target()
968 kref_get(&tgt->kref); in __ibmvfc_get_target()
969 return tgt; in __ibmvfc_get_target()
984 struct ibmvfc_target *tgt; in ibmvfc_get_target() local
988 tgt = __ibmvfc_get_target(starget); in ibmvfc_get_target()
990 return tgt; in ibmvfc_get_target()
1099 struct ibmvfc_target *tgt = container_of(kref, struct ibmvfc_target, kref); in ibmvfc_release_tgt() local
1100 kfree(tgt); in ibmvfc_release_tgt()
1112 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_node_name() local
1113 fc_starget_port_name(starget) = tgt ? tgt->ids.node_name : 0; in ibmvfc_get_starget_node_name()
1114 if (tgt) in ibmvfc_get_starget_node_name()
1115 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_node_name()
1127 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_port_name() local
1128 fc_starget_port_name(starget) = tgt ? tgt->ids.port_name : 0; in ibmvfc_get_starget_port_name()
1129 if (tgt) in ibmvfc_get_starget_port_name()
1130 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_port_name()
1142 struct ibmvfc_target *tgt = ibmvfc_get_target(starget); in ibmvfc_get_starget_port_id() local
1143 fc_starget_port_id(starget) = tgt ? tgt->scsi_id : -1; in ibmvfc_get_starget_port_id()
1144 if (tgt) in ibmvfc_get_starget_port_id()
1145 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_get_starget_port_id()
1557 struct ibmvfc_target *tgt; in ibmvfc_relogin() local
1559 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_relogin()
1560 if (rport == tgt->rport) { in ibmvfc_relogin()
1561 ibmvfc_del_tgt(tgt); in ibmvfc_relogin()
1810 struct ibmvfc_target *tgt; in ibmvfc_bsg_plogi() local
1818 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_bsg_plogi()
1819 if (tgt->scsi_id == port_id) { in ibmvfc_bsg_plogi()
2599 struct ibmvfc_target *tgt; in ibmvfc_terminate_rport_io() local
2618 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_terminate_rport_io()
2619 if (tgt->scsi_id == rport->port_id) { in ibmvfc_terminate_rport_io()
2625 if (found && tgt->action == IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT) { in ibmvfc_terminate_rport_io()
2631 ibmvfc_del_tgt(tgt); in ibmvfc_terminate_rport_io()
2711 struct ibmvfc_target *tgt; in ibmvfc_handle_async() local
2758 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_handle_async()
2761 if (crq->scsi_id && cpu_to_be64(tgt->scsi_id) != crq->scsi_id) in ibmvfc_handle_async()
2763 if (crq->wwpn && cpu_to_be64(tgt->ids.port_name) != crq->wwpn) in ibmvfc_handle_async()
2765 if (crq->node_name && cpu_to_be64(tgt->ids.node_name) != crq->node_name) in ibmvfc_handle_async()
2767 if (tgt->need_login && be64_to_cpu(crq->event) == IBMVFC_AE_ELS_LOGO) in ibmvfc_handle_async()
2768 tgt->logo_rcvd = 1; in ibmvfc_handle_async()
2769 if (!tgt->need_login || be64_to_cpu(crq->event) == IBMVFC_AE_ELS_PLOGI) { in ibmvfc_handle_async()
2770 ibmvfc_del_tgt(tgt); in ibmvfc_handle_async()
3306 static void ibmvfc_init_tgt(struct ibmvfc_target *tgt, in ibmvfc_init_tgt() argument
3309 if (!ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT)) in ibmvfc_init_tgt()
3310 tgt->job_step = job_step; in ibmvfc_init_tgt()
3311 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_init_tgt()
3322 static int ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt, in ibmvfc_retry_tgt_init() argument
3325 if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) { in ibmvfc_retry_tgt_init()
3326 ibmvfc_del_tgt(tgt); in ibmvfc_retry_tgt_init()
3327 wake_up(&tgt->vhost->work_wait_q); in ibmvfc_retry_tgt_init()
3330 ibmvfc_init_tgt(tgt, job_step); in ibmvfc_retry_tgt_init()
3375 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_prli_done() local
3383 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_prli_done()
3386 tgt_dbg(tgt, "Process Login succeeded: %X %02X %04X\n", in ibmvfc_tgt_prli_done()
3393 tgt->need_login = 0; in ibmvfc_tgt_prli_done()
3394 tgt->ids.roles = 0; in ibmvfc_tgt_prli_done()
3396 tgt->ids.roles |= FC_PORT_ROLE_FCP_TARGET; in ibmvfc_tgt_prli_done()
3398 tgt->ids.roles |= FC_PORT_ROLE_FCP_INITIATOR; in ibmvfc_tgt_prli_done()
3399 tgt->add_rport = 1; in ibmvfc_tgt_prli_done()
3401 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3403 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
3405 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3407 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3412 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
3418 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_prli_done()
3419 else if (tgt->logo_rcvd) in ibmvfc_tgt_prli_done()
3420 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_prli_done()
3422 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_prli_done()
3424 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_prli_done()
3426 tgt_log(tgt, level, "Process Login failed: %s (%x:%x) rc=0x%02X\n", in ibmvfc_tgt_prli_done()
3432 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_prli_done()
3442 static void ibmvfc_tgt_send_prli(struct ibmvfc_target *tgt) in ibmvfc_tgt_send_prli() argument
3445 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_send_prli()
3451 kref_get(&tgt->kref); in ibmvfc_tgt_send_prli()
3455 evt->tgt = tgt; in ibmvfc_tgt_send_prli()
3461 prli->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_send_prli()
3471 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_send_prli()
3474 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_prli()
3475 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_prli()
3477 tgt_dbg(tgt, "Sent process login\n"); in ibmvfc_tgt_send_prli()
3487 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_plogi_done() local
3494 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_plogi_done()
3497 tgt_dbg(tgt, "Port Login succeeded\n"); in ibmvfc_tgt_plogi_done()
3498 if (tgt->ids.port_name && in ibmvfc_tgt_plogi_done()
3499 tgt->ids.port_name != wwn_to_u64(rsp->service_parms.port_name)) { in ibmvfc_tgt_plogi_done()
3501 tgt_dbg(tgt, "Port re-init required\n"); in ibmvfc_tgt_plogi_done()
3504 tgt->ids.node_name = wwn_to_u64(rsp->service_parms.node_name); in ibmvfc_tgt_plogi_done()
3505 tgt->ids.port_name = wwn_to_u64(rsp->service_parms.port_name); in ibmvfc_tgt_plogi_done()
3506 tgt->ids.port_id = tgt->scsi_id; in ibmvfc_tgt_plogi_done()
3507 memcpy(&tgt->service_parms, &rsp->service_parms, in ibmvfc_tgt_plogi_done()
3508 sizeof(tgt->service_parms)); in ibmvfc_tgt_plogi_done()
3509 memcpy(&tgt->service_parms_change, &rsp->service_parms_change, in ibmvfc_tgt_plogi_done()
3510 sizeof(tgt->service_parms_change)); in ibmvfc_tgt_plogi_done()
3511 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_plogi_done()
3516 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_plogi_done()
3521 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_plogi_done()
3523 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_plogi_done()
3525 tgt_log(tgt, level, "Port Login failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_plogi_done()
3533 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_plogi_done()
3543 static void ibmvfc_tgt_send_plogi(struct ibmvfc_target *tgt) in ibmvfc_tgt_send_plogi() argument
3546 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_send_plogi()
3552 kref_get(&tgt->kref); in ibmvfc_tgt_send_plogi()
3553 tgt->logo_rcvd = 0; in ibmvfc_tgt_send_plogi()
3556 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_send_plogi()
3558 evt->tgt = tgt; in ibmvfc_tgt_send_plogi()
3564 plogi->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_send_plogi()
3568 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_send_plogi()
3569 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_send_plogi()
3571 tgt_dbg(tgt, "Sent port login\n"); in ibmvfc_tgt_send_plogi()
3581 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_implicit_logout_done() local
3588 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout_done()
3592 tgt_dbg(tgt, "Implicit Logout succeeded\n"); in ibmvfc_tgt_implicit_logout_done()
3595 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_done()
3600 tgt_err(tgt, "Implicit Logout failed: rc=0x%02X\n", status); in ibmvfc_tgt_implicit_logout_done()
3604 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_plogi); in ibmvfc_tgt_implicit_logout_done()
3605 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_done()
3616 static struct ibmvfc_event *__ibmvfc_tgt_get_implicit_logout_evt(struct ibmvfc_target *tgt, in __ibmvfc_tgt_get_implicit_logout_evt() argument
3620 struct ibmvfc_host *vhost = tgt->vhost; in __ibmvfc_tgt_get_implicit_logout_evt()
3623 kref_get(&tgt->kref); in __ibmvfc_tgt_get_implicit_logout_evt()
3626 evt->tgt = tgt; in __ibmvfc_tgt_get_implicit_logout_evt()
3632 mad->old_scsi_id = cpu_to_be64(tgt->scsi_id); in __ibmvfc_tgt_get_implicit_logout_evt()
3641 static void ibmvfc_tgt_implicit_logout(struct ibmvfc_target *tgt) in ibmvfc_tgt_implicit_logout() argument
3643 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_implicit_logout()
3650 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt, in ibmvfc_tgt_implicit_logout()
3653 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_implicit_logout()
3656 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_implicit_logout()
3657 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout()
3659 tgt_dbg(tgt, "Sent Implicit Logout\n"); in ibmvfc_tgt_implicit_logout()
3669 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_implicit_logout_and_del_done() local
3685 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del_done()
3687 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT); in ibmvfc_tgt_implicit_logout_and_del_done()
3689 tgt_dbg(tgt, "Implicit Logout %s\n", (status == IBMVFC_MAD_SUCCESS) ? "succeeded" : "failed"); in ibmvfc_tgt_implicit_logout_and_del_done()
3690 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_and_del_done()
3699 static void ibmvfc_tgt_implicit_logout_and_del(struct ibmvfc_target *tgt) in ibmvfc_tgt_implicit_logout_and_del() argument
3701 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_implicit_logout_and_del()
3705 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del()
3713 evt = __ibmvfc_tgt_get_implicit_logout_evt(tgt, in ibmvfc_tgt_implicit_logout_and_del()
3716 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT); in ibmvfc_tgt_implicit_logout_and_del()
3719 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_implicit_logout_and_del()
3720 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_implicit_logout_and_del()
3722 tgt_dbg(tgt, "Sent Implicit Logout\n"); in ibmvfc_tgt_implicit_logout_and_del()
3732 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_move_login_done() local
3739 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_move_login_done()
3742 tgt_dbg(tgt, "Move Login succeeded for old scsi_id: %llX\n", tgt->old_scsi_id); in ibmvfc_tgt_move_login_done()
3743 tgt->ids.node_name = wwn_to_u64(rsp->service_parms.node_name); in ibmvfc_tgt_move_login_done()
3744 tgt->ids.port_name = wwn_to_u64(rsp->service_parms.port_name); in ibmvfc_tgt_move_login_done()
3745 tgt->ids.port_id = tgt->scsi_id; in ibmvfc_tgt_move_login_done()
3746 memcpy(&tgt->service_parms, &rsp->service_parms, in ibmvfc_tgt_move_login_done()
3747 sizeof(tgt->service_parms)); in ibmvfc_tgt_move_login_done()
3748 memcpy(&tgt->service_parms_change, &rsp->service_parms_change, in ibmvfc_tgt_move_login_done()
3749 sizeof(tgt->service_parms_change)); in ibmvfc_tgt_move_login_done()
3750 ibmvfc_init_tgt(tgt, ibmvfc_tgt_send_prli); in ibmvfc_tgt_move_login_done()
3755 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_move_login); in ibmvfc_tgt_move_login_done()
3759 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_move_login); in ibmvfc_tgt_move_login_done()
3761 tgt_log(tgt, level, in ibmvfc_tgt_move_login_done()
3763 tgt->old_scsi_id, be32_to_cpu(rsp->flags), be16_to_cpu(rsp->vios_flags), in ibmvfc_tgt_move_login_done()
3768 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login_done()
3779 static void ibmvfc_tgt_move_login(struct ibmvfc_target *tgt) in ibmvfc_tgt_move_login() argument
3781 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_move_login()
3788 kref_get(&tgt->kref); in ibmvfc_tgt_move_login()
3791 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_move_login()
3793 evt->tgt = tgt; in ibmvfc_tgt_move_login()
3800 move->old_scsi_id = cpu_to_be64(tgt->old_scsi_id); in ibmvfc_tgt_move_login()
3801 move->new_scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_move_login()
3802 move->wwpn = cpu_to_be64(tgt->wwpn); in ibmvfc_tgt_move_login()
3803 move->node_name = cpu_to_be64(tgt->ids.node_name); in ibmvfc_tgt_move_login()
3807 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); in ibmvfc_tgt_move_login()
3808 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_move_login()
3810 tgt_dbg(tgt, "Sent Move Login for old scsi_id: %llX\n", tgt->old_scsi_id); in ibmvfc_tgt_move_login()
3822 struct ibmvfc_target *tgt) in ibmvfc_adisc_needs_plogi() argument
3824 if (wwn_to_u64((u8 *)&mad->fc_iu.response[2]) != tgt->ids.port_name) in ibmvfc_adisc_needs_plogi()
3826 if (wwn_to_u64((u8 *)&mad->fc_iu.response[4]) != tgt->ids.node_name) in ibmvfc_adisc_needs_plogi()
3828 if (be32_to_cpu(mad->fc_iu.response[6]) != tgt->scsi_id) in ibmvfc_adisc_needs_plogi()
3840 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_adisc_done() local
3847 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc_done()
3848 del_timer(&tgt->timer); in ibmvfc_tgt_adisc_done()
3852 tgt_dbg(tgt, "ADISC succeeded\n"); in ibmvfc_tgt_adisc_done()
3853 if (ibmvfc_adisc_needs_plogi(mad, tgt)) in ibmvfc_tgt_adisc_done()
3854 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_adisc_done()
3860 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_adisc_done()
3863 tgt_info(tgt, "ADISC failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_adisc_done()
3871 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc_done()
3917 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_adisc_cancel_done() local
3919 tgt_dbg(tgt, "ADISC cancel complete\n"); in ibmvfc_tgt_adisc_cancel_done()
3922 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc_cancel_done()
3936 struct ibmvfc_target *tgt = from_timer(tgt, t, timer); in ibmvfc_adisc_timeout() local
3937 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_adisc_timeout()
3943 tgt_dbg(tgt, "ADISC timeout\n"); in ibmvfc_adisc_timeout()
3946 tgt->action != IBMVFC_TGT_ACTION_INIT_WAIT || in ibmvfc_adisc_timeout()
3954 kref_get(&tgt->kref); in ibmvfc_adisc_timeout()
3958 evt->tgt = tgt; in ibmvfc_adisc_timeout()
3964 tmf->scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_adisc_timeout()
3965 tmf->cancel_key = cpu_to_be32(tgt->cancel_key); in ibmvfc_adisc_timeout()
3970 tgt_err(tgt, "Failed to send cancel event for ADISC. rc=%d\n", rc); in ibmvfc_adisc_timeout()
3972 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_adisc_timeout()
3975 tgt_dbg(tgt, "Attempting to cancel ADISC\n"); in ibmvfc_adisc_timeout()
3990 static void ibmvfc_tgt_adisc(struct ibmvfc_target *tgt) in ibmvfc_tgt_adisc() argument
3993 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_adisc()
3999 kref_get(&tgt->kref); in ibmvfc_tgt_adisc()
4003 evt->tgt = tgt; in ibmvfc_tgt_adisc()
4008 mad->iu.scsi_id = cpu_to_be64(tgt->scsi_id); in ibmvfc_tgt_adisc()
4009 mad->iu.cancel_key = cpu_to_be32(tgt->cancel_key); in ibmvfc_tgt_adisc()
4018 if (timer_pending(&tgt->timer)) in ibmvfc_tgt_adisc()
4019 mod_timer(&tgt->timer, jiffies + (IBMVFC_ADISC_TIMEOUT * HZ)); in ibmvfc_tgt_adisc()
4021 tgt->timer.expires = jiffies + (IBMVFC_ADISC_TIMEOUT * HZ); in ibmvfc_tgt_adisc()
4022 add_timer(&tgt->timer); in ibmvfc_tgt_adisc()
4025 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_adisc()
4028 del_timer(&tgt->timer); in ibmvfc_tgt_adisc()
4029 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_adisc()
4030 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_adisc()
4032 tgt_dbg(tgt, "Sent ADISC\n"); in ibmvfc_tgt_adisc()
4042 struct ibmvfc_target *tgt = evt->tgt; in ibmvfc_tgt_query_target_done() local
4049 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target_done()
4052 tgt_dbg(tgt, "Query Target succeeded\n"); in ibmvfc_tgt_query_target_done()
4053 if (be64_to_cpu(rsp->scsi_id) != tgt->scsi_id) in ibmvfc_tgt_query_target_done()
4054 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4056 ibmvfc_init_tgt(tgt, ibmvfc_tgt_adisc); in ibmvfc_tgt_query_target_done()
4061 ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target); in ibmvfc_tgt_query_target_done()
4068 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4070 level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target); in ibmvfc_tgt_query_target_done()
4072 ibmvfc_del_tgt(tgt); in ibmvfc_tgt_query_target_done()
4074 tgt_log(tgt, level, "Query Target failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n", in ibmvfc_tgt_query_target_done()
4083 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target_done()
4093 static void ibmvfc_tgt_query_target(struct ibmvfc_target *tgt) in ibmvfc_tgt_query_target() argument
4096 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_query_target()
4102 kref_get(&tgt->kref); in ibmvfc_tgt_query_target()
4105 evt->tgt = tgt; in ibmvfc_tgt_query_target()
4112 query_tgt->wwpn = cpu_to_be64(tgt->ids.port_name); in ibmvfc_tgt_query_target()
4114 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_INIT_WAIT); in ibmvfc_tgt_query_target()
4117 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); in ibmvfc_tgt_query_target()
4118 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_query_target()
4120 tgt_dbg(tgt, "Sent Query Target\n"); in ibmvfc_tgt_query_target()
4136 struct ibmvfc_target *tgt; in ibmvfc_alloc_target() local
4143 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_alloc_target()
4144 if (tgt->wwpn == wwpn) { in ibmvfc_alloc_target()
4145 wtgt = tgt; in ibmvfc_alloc_target()
4150 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_alloc_target()
4151 if (tgt->scsi_id == scsi_id) { in ibmvfc_alloc_target()
4152 stgt = tgt; in ibmvfc_alloc_target()
4185 if (tgt->need_login) in ibmvfc_alloc_target()
4186 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); in ibmvfc_alloc_target()
4191 tgt = mempool_alloc(vhost->tgt_pool, GFP_NOIO); in ibmvfc_alloc_target()
4192 memset(tgt, 0, sizeof(*tgt)); in ibmvfc_alloc_target()
4193 tgt->scsi_id = scsi_id; in ibmvfc_alloc_target()
4194 tgt->wwpn = wwpn; in ibmvfc_alloc_target()
4195 tgt->vhost = vhost; in ibmvfc_alloc_target()
4196 tgt->need_login = 1; in ibmvfc_alloc_target()
4197 timer_setup(&tgt->timer, ibmvfc_adisc_timeout, 0); in ibmvfc_alloc_target()
4198 kref_init(&tgt->kref); in ibmvfc_alloc_target()
4199 ibmvfc_init_tgt(tgt, ibmvfc_tgt_implicit_logout); in ibmvfc_alloc_target()
4201 tgt->cancel_key = vhost->task_set++; in ibmvfc_alloc_target()
4202 list_add_tail(&tgt->queue, &vhost->targets); in ibmvfc_alloc_target()
4474 struct ibmvfc_target *tgt; in ibmvfc_dev_init_to_do() local
4476 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_dev_init_to_do()
4477 if (tgt->action == IBMVFC_TGT_ACTION_INIT || in ibmvfc_dev_init_to_do()
4478 tgt->action == IBMVFC_TGT_ACTION_INIT_WAIT) in ibmvfc_dev_init_to_do()
4494 struct ibmvfc_target *tgt; in ibmvfc_dev_logo_to_do() local
4496 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_dev_logo_to_do()
4497 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT || in ibmvfc_dev_logo_to_do()
4498 tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT) in ibmvfc_dev_logo_to_do()
4513 struct ibmvfc_target *tgt; in __ibmvfc_work_to_do() local
4526 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
4527 if (tgt->action == IBMVFC_TGT_ACTION_INIT) in __ibmvfc_work_to_do()
4529 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
4530 if (tgt->action == IBMVFC_TGT_ACTION_INIT_WAIT) in __ibmvfc_work_to_do()
4537 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
4538 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) in __ibmvfc_work_to_do()
4540 list_for_each_entry(tgt, &vhost->targets, queue) in __ibmvfc_work_to_do()
4541 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT_WAIT) in __ibmvfc_work_to_do()
4598 static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) in ibmvfc_tgt_add_rport() argument
4600 struct ibmvfc_host *vhost = tgt->vhost; in ibmvfc_tgt_add_rport()
4604 tgt_dbg(tgt, "Adding rport\n"); in ibmvfc_tgt_add_rport()
4605 rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); in ibmvfc_tgt_add_rport()
4608 if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) { in ibmvfc_tgt_add_rport()
4609 tgt_dbg(tgt, "Deleting rport\n"); in ibmvfc_tgt_add_rport()
4610 list_del(&tgt->queue); in ibmvfc_tgt_add_rport()
4611 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT); in ibmvfc_tgt_add_rport()
4614 del_timer_sync(&tgt->timer); in ibmvfc_tgt_add_rport()
4615 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_tgt_add_rport()
4617 } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) { in ibmvfc_tgt_add_rport()
4618 tgt_dbg(tgt, "Deleting rport with outstanding I/O\n"); in ibmvfc_tgt_add_rport()
4619 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT); in ibmvfc_tgt_add_rport()
4620 tgt->rport = NULL; in ibmvfc_tgt_add_rport()
4624 } else if (rport && tgt->action == IBMVFC_TGT_ACTION_DELETED_RPORT) { in ibmvfc_tgt_add_rport()
4630 tgt_dbg(tgt, "rport add succeeded\n"); in ibmvfc_tgt_add_rport()
4631 tgt->rport = rport; in ibmvfc_tgt_add_rport()
4632 rport->maxframe_size = be16_to_cpu(tgt->service_parms.common.bb_rcv_sz) & 0x0fff; in ibmvfc_tgt_add_rport()
4634 tgt->target_id = rport->scsi_target_id; in ibmvfc_tgt_add_rport()
4635 if (be32_to_cpu(tgt->service_parms.class1_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
4637 if (be32_to_cpu(tgt->service_parms.class2_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
4639 if (be32_to_cpu(tgt->service_parms.class3_parms[0]) & 0x80000000) in ibmvfc_tgt_add_rport()
4644 tgt_dbg(tgt, "rport add failed\n"); in ibmvfc_tgt_add_rport()
4655 struct ibmvfc_target *tgt; in ibmvfc_do_work() local
4724 list_for_each_entry(tgt, &vhost->targets, queue) in ibmvfc_do_work()
4725 ibmvfc_init_tgt(tgt, ibmvfc_tgt_query_target); in ibmvfc_do_work()
4729 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
4730 if (tgt->action == IBMVFC_TGT_ACTION_INIT) { in ibmvfc_do_work()
4731 tgt->job_step(tgt); in ibmvfc_do_work()
4741 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
4742 if (tgt->action == IBMVFC_TGT_ACTION_LOGOUT_RPORT) { in ibmvfc_do_work()
4743 tgt->job_step(tgt); in ibmvfc_do_work()
4753 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
4754 if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) { in ibmvfc_do_work()
4755 tgt_dbg(tgt, "Deleting rport\n"); in ibmvfc_do_work()
4756 rport = tgt->rport; in ibmvfc_do_work()
4757 tgt->rport = NULL; in ibmvfc_do_work()
4758 list_del(&tgt->queue); in ibmvfc_do_work()
4759 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DELETED_RPORT); in ibmvfc_do_work()
4763 del_timer_sync(&tgt->timer); in ibmvfc_do_work()
4764 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_do_work()
4766 } else if (tgt->action == IBMVFC_TGT_ACTION_DEL_AND_LOGOUT_RPORT) { in ibmvfc_do_work()
4767 tgt_dbg(tgt, "Deleting rport with I/O outstanding\n"); in ibmvfc_do_work()
4768 rport = tgt->rport; in ibmvfc_do_work()
4769 tgt->rport = NULL; in ibmvfc_do_work()
4770 ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT); in ibmvfc_do_work()
4815 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_do_work()
4816 if (tgt->action == IBMVFC_TGT_ACTION_INIT) { in ibmvfc_do_work()
4817 tgt->job_step(tgt); in ibmvfc_do_work()
5062 struct ibmvfc_target *tgt; in ibmvfc_rport_add_thread() local
5074 list_for_each_entry(tgt, &vhost->targets, queue) { in ibmvfc_rport_add_thread()
5075 if (tgt->add_rport) { in ibmvfc_rport_add_thread()
5077 tgt->add_rport = 0; in ibmvfc_rport_add_thread()
5078 kref_get(&tgt->kref); in ibmvfc_rport_add_thread()
5079 rport = tgt->rport; in ibmvfc_rport_add_thread()
5082 ibmvfc_tgt_add_rport(tgt); in ibmvfc_rport_add_thread()
5085 tgt_dbg(tgt, "Setting rport roles\n"); in ibmvfc_rport_add_thread()
5086 fc_remote_port_rolechg(rport, tgt->ids.roles); in ibmvfc_rport_add_thread()
5092 kref_put(&tgt->kref, ibmvfc_release_tgt); in ibmvfc_rport_add_thread()