Lines Matching refs:plun

457 static int fcp_send_scsi(struct fcp_lun *plun, uchar_t opcode,
471 static int fcp_trigger_lun(struct fcp_lun *plun, child_info_t *cip,
479 static void fcp_offline_lun(struct fcp_lun *plun, int link_cnt, int tgt_cnt,
481 static void fcp_prepare_offline_lun(struct fcp_lun *plun, int link_cnt,
483 static void fcp_offline_lun_now(struct fcp_lun *plun, int link_cnt,
487 static void fcp_update_offline_flags(struct fcp_lun *plun);
488 static struct fcp_pkt *fcp_scan_commands(struct fcp_lun *plun);
498 static void fcp_dealloc_lun(struct fcp_lun *plun);
529 static child_info_t *fcp_get_cip(struct fcp_lun *plun, child_info_t *cip,
531 static int fcp_is_dip_present(struct fcp_lun *plun, dev_info_t *cdip);
532 static int fcp_is_child_present(struct fcp_lun *plun, child_info_t *cip);
533 static dev_info_t *fcp_create_dip(struct fcp_lun *plun, int link_cnt,
535 static dev_info_t *fcp_find_existing_dip(struct fcp_lun *plun,
537 static int fcp_online_child(struct fcp_lun *plun, child_info_t *cip,
539 static int fcp_offline_child(struct fcp_lun *plun, child_info_t *cip,
541 static void fcp_remove_child(struct fcp_lun *plun);
550 struct fcp_lun *plun);
557 struct fcp_lun *plun, child_info_t *cip, int what, int link_cnt,
560 struct fcp_lun *plun, child_info_t *cip, int what, int link_cnt,
590 static char *fcp_get_lun_path(struct fcp_lun *plun);
595 static char *fcp_get_lun_path(struct fcp_lun *plun);
605 static mdi_pathinfo_t *fcp_create_pip(struct fcp_lun *plun, int lcount,
607 static mdi_pathinfo_t *fcp_find_existing_pip(struct fcp_lun *plun,
609 static int fcp_is_pip_present(struct fcp_lun *plun, mdi_pathinfo_t *pip);
612 static int fcp_copy_guid_2_lun_block(struct fcp_lun *plun, char *guidp);
613 static int fcp_update_mpxio_path(struct fcp_lun *plun, child_info_t *cip,
617 static int fcp_symmetric_device_probe(struct fcp_lun *plun);
692 #define LUN_PORT (plun->lun_tgt->tgt_port)
693 #define LUN_TGT (plun->lun_tgt)
1446 struct fcp_lun *plun = NULL; in fcp_setup_device_data_ioctl() local
1627 if ((plun = fcp_get_lun(ptgt, 0)) == NULL) { in fcp_setup_device_data_ioctl()
1630 dev_data[i].dev0_type = plun->lun_type; in fcp_setup_device_data_ioctl()
1751 struct fcp_lun *plun = NULL; in fcp_get_target_mappings() local
1838 for (plun = ptgt->tgt_lun; plun != NULL; in fcp_get_target_mappings()
1839 plun = plun->lun_next) { in fcp_get_target_mappings()
1840 if (plun->lun_state & FCP_LUN_OFFLINE) { in fcp_get_target_mappings()
1844 path = fcp_get_lun_path(plun); in fcp_get_target_mappings()
1860 map->osLUN = plun->lun_num; in fcp_get_target_mappings()
1869 BE_16(plun->lun_addr.ent_addr_0); in fcp_get_target_mappings()
1871 BE_16(plun->lun_addr.ent_addr_1); in fcp_get_target_mappings()
1873 BE_16(plun->lun_addr.ent_addr_2); in fcp_get_target_mappings()
1875 BE_16(plun->lun_addr.ent_addr_3); in fcp_get_target_mappings()
1884 if (plun->lun_guid) { in fcp_get_target_mappings()
1887 fcp_ascii_to_wwn(plun->lun_guid, in fcp_get_target_mappings()
1891 plun->lun_guid_size / 2) { in fcp_get_target_mappings()
1900 plun->lun_guid_size / 2); in fcp_get_target_mappings()
2293 struct fcp_lun *plun = NULL; in fcp_send_scsi_ioctl() local
2529 } else if ((plun = fcp_lookup_lun(pptr, (uchar_t *)wwn_ptr, in fcp_send_scsi_ioctl()
2596 ptgt = plun->lun_tgt; in fcp_send_scsi_ioctl()
2612 icmd->ipkt_lun = plun; in fcp_send_scsi_ioctl()
2692 ptgt->tgt_d_id, plun->lun_num, in fcp_send_scsi_ioctl()
2874 struct fcp_lun *plun = NULL; in fcp_is_reconfig_needed() local
2962 for (plun = ptgt->tgt_lun; plun; in fcp_is_reconfig_needed()
2963 plun = plun->lun_next) { in fcp_is_reconfig_needed()
2964 if (plun->lun_num == lun_num) { in fcp_is_reconfig_needed()
2993 fcp_symmetric_device_probe(struct fcp_lun *plun) in fcp_symmetric_device_probe() argument
2995 struct scsi_inquiry *stdinq = &plun->lun_inq; in fcp_symmetric_device_probe()
3845 struct fcp_lun *plun; in fcp_port_ioctl() local
3858 if ((plun = fcp_get_lun_from_cip(pptr, cip)) == NULL) { in fcp_port_ioctl()
3864 head = fcp_scan_commands(plun); in fcp_port_ioctl()
3869 tcount = plun->lun_tgt->tgt_change_cnt; in fcp_port_ioctl()
3883 *rval = fcp_pass_to_hp_and_wait(pptr, plun, cip, in fcp_port_ioctl()
3891 fcp_update_offline_flags(plun); in fcp_port_ioctl()
3893 ptgt = plun->lun_tgt; in fcp_port_ioctl()
3924 struct fcp_lun *plun; in fcp_port_ioctl() local
3934 if ((plun = fcp_get_lun_from_cip(pptr, cip)) == NULL) { in fcp_port_ioctl()
3940 tcount = plun->lun_tgt->tgt_change_cnt; in fcp_port_ioctl()
3950 plun->lun_state |= FCP_LUN_ONLINING; in fcp_port_ioctl()
3960 *rval = fcp_pass_to_hp_and_wait(pptr, plun, cip, in fcp_port_ioctl()
3966 plun->lun_state &= ~FCP_LUN_ONLINING; in fcp_port_ioctl()
3972 plun->lun_state &= ~(FCP_LUN_OFFLINE | FCP_LUN_BUSY | in fcp_port_ioctl()
3982 struct fcp_lun *plun = NULL; in fcp_port_ioctl() local
4014 plun = ptgt->tgt_lun; in fcp_port_ioctl()
4021 while (plun && in fcp_port_ioctl()
4022 plun->lun_state & FCP_LUN_OFFLINE) { in fcp_port_ioctl()
4023 plun = plun->lun_next; in fcp_port_ioctl()
4031 if (*rval == 0 && ptgt && plun) { in fcp_port_ioctl()
4032 mutex_enter(&plun->lun_mutex); in fcp_port_ioctl()
4053 if (plun->lun_cip) { in fcp_port_ioctl()
4054 if (plun->lun_mpxio == 0) { in fcp_port_ioctl()
4055 cdip = DIP(plun->lun_cip); in fcp_port_ioctl()
4058 PIP(plun->lun_cip)); in fcp_port_ioctl()
4066 mutex_exit(&plun->lun_mutex); in fcp_port_ioctl()
4068 mutex_enter(&plun->lun_mutex); in fcp_port_ioctl()
4074 mutex_exit(&plun->lun_mutex); in fcp_port_ioctl()
4075 plun = plun->lun_next; in fcp_port_ioctl()
4076 while (plun && (plun->lun_state in fcp_port_ioctl()
4078 plun = plun->lun_next; in fcp_port_ioctl()
4080 if (!plun) { in fcp_port_ioctl()
4083 mutex_enter(&plun->lun_mutex); in fcp_port_ioctl()
4095 if (plun) { in fcp_port_ioctl()
4096 mutex_exit(&plun->lun_mutex); in fcp_port_ioctl()
4129 struct fcp_lun *plun; in fcp_port_ioctl() local
4138 if ((plun = fcp_get_lun_from_cip(pptr, cip)) == NULL) { in fcp_port_ioctl()
4145 mutex_enter(&plun->lun_tgt->tgt_mutex); in fcp_port_ioctl()
4146 if (!(plun->lun_state & FCP_SCSI_LUN_TGT_INIT)) { in fcp_port_ioctl()
4147 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_port_ioctl()
4153 if (plun->lun_sd == NULL) { in fcp_port_ioctl()
4154 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_port_ioctl()
4159 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_port_ioctl()
4165 if (fcp_scsi_reset(&plun->lun_sd->sd_address, in fcp_port_ioctl()
4862 struct fcp_lun *plun; in fcp_handle_reportlun_changed() local
4871 if ((plun = fcp_get_lun(ptgt, 0)) == NULL) { in fcp_handle_reportlun_changed()
4876 plun = fcp_alloc_lun(ptgt); in fcp_handle_reportlun_changed()
4877 if (plun == NULL) { in fcp_handle_reportlun_changed()
4891 if ((plun->lun_state & FCP_LUN_OFFLINE) || lun0_newalloc) { in fcp_handle_reportlun_changed()
4892 plun->lun_state |= FCP_LUN_DEVICE_NOT_CONNECTED; in fcp_handle_reportlun_changed()
4894 plun->lun_state |= (FCP_LUN_BUSY | FCP_LUN_MARK); in fcp_handle_reportlun_changed()
4895 plun->lun_state &= ~FCP_LUN_OFFLINE; in fcp_handle_reportlun_changed()
4901 if (fcp_send_scsi(plun, SCMD_REPORT_LUN, in fcp_handle_reportlun_changed()
5448 struct fcp_lun *plun; in fcp_update_tgt_state() local
5461 for (plun = ptgt->tgt_lun; plun != NULL; in fcp_update_tgt_state()
5462 plun = plun->lun_next) { in fcp_update_tgt_state()
5463 if (!(plun->lun_state & FCP_LUN_OFFLINE)) { in fcp_update_tgt_state()
5466 plun->lun_state |= state; in fcp_update_tgt_state()
5467 plun->lun_trace = 0; in fcp_update_tgt_state()
5469 plun->lun_state &= ~state; in fcp_update_tgt_state()
5494 fcp_update_lun_state(struct fcp_lun *plun, int flag, uint32_t state) in fcp_update_lun_state() argument
5496 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_update_lun_state()
5500 if (!(plun->lun_state & FCP_TGT_OFFLINE)) { in fcp_update_lun_state()
5502 plun->lun_state |= state; in fcp_update_lun_state()
5504 plun->lun_state &= ~state; in fcp_update_lun_state()
6209 struct fcp_lun *plun; in fcp_icmd_callback() local
6338 if ((plun = fcp_get_lun(ptgt, 0)) == NULL) { in fcp_icmd_callback()
6343 plun = fcp_alloc_lun(ptgt); in fcp_icmd_callback()
6344 if (plun == NULL) { in fcp_icmd_callback()
6359 if ((plun->lun_state & FCP_LUN_OFFLINE) || in fcp_icmd_callback()
6361 plun->lun_state |= FCP_LUN_DEVICE_NOT_CONNECTED; in fcp_icmd_callback()
6363 plun->lun_state |= (FCP_LUN_BUSY | FCP_LUN_MARK); in fcp_icmd_callback()
6364 plun->lun_state &= ~FCP_LUN_OFFLINE; in fcp_icmd_callback()
6379 if (fcp_send_scsi(plun, SCMD_REPORT_LUN, in fcp_icmd_callback()
6518 fcp_send_scsi(struct fcp_lun *plun, uchar_t opcode, int alloc_len, in fcp_send_scsi() argument
6531 ASSERT(plun != NULL); in fcp_send_scsi()
6533 ptgt = plun->lun_tgt; in fcp_send_scsi()
6556 icmd->ipkt_lun = plun; in fcp_send_scsi()
6581 bcopy(&(plun->lun_addr), &(fcmd->fcp_ent_addr), FCP_LUN_SIZE); in fcp_send_scsi()
6907 struct fcp_lun *plun; in fcp_scsi_callback() local
6912 plun = icmd->ipkt_lun; in fcp_scsi_callback()
6927 rsp->fcp_u.fcp_status.scsi_status, plun->lun_num); in fcp_scsi_callback()
6936 if ((plun->lun_guid_size == 0) && in fcp_scsi_callback()
6938 (fcp_symmetric_device_probe(plun) == 0)) { in fcp_scsi_callback()
6942 (void) fcp_copy_guid_2_lun_block(plun, ascii_wwn); in fcp_scsi_callback()
7070 ptgt->tgt_d_id, plun->lun_type); in fcp_scsi_callback()
7081 if (plun->lun_type == DTYPE_ESI) { in fcp_scsi_callback()
7094 plun->lun_state &= ~(FCP_LUN_OFFLINE | in fcp_scsi_callback()
7158 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_1); in fcp_scsi_callback()
7169 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_2); in fcp_scsi_callback()
7241 struct fcp_lun *plun; in fcp_handle_page83() local
7253 plun = icmd->ipkt_lun; in fcp_handle_page83()
7256 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_7); in fcp_handle_page83()
7266 dev_id_page[0], plun->lun_num); in fcp_handle_page83()
7271 (unsigned char *) &plun->lun_inq, /* standard inquiry */ in fcp_handle_page83()
7272 sizeof (plun->lun_inq), /* size of standard inquiry */ in fcp_handle_page83()
7289 if (plun->lun_guid && in fcp_handle_page83()
7290 strcmp(guid, plun->lun_guid)) { in fcp_handle_page83()
7301 plun->lun_state |= FCP_LUN_CHANGED; in fcp_handle_page83()
7303 if (plun->lun_old_guid) { in fcp_handle_page83()
7304 kmem_free(plun->lun_old_guid, in fcp_handle_page83()
7305 plun->lun_old_guid_size); in fcp_handle_page83()
7308 len = plun->lun_guid_size; in fcp_handle_page83()
7309 plun->lun_old_guid_size = len; in fcp_handle_page83()
7311 plun->lun_old_guid = kmem_zalloc(len, in fcp_handle_page83()
7314 if (plun->lun_old_guid) { in fcp_handle_page83()
7319 bcopy(plun->lun_guid, in fcp_handle_page83()
7320 plun->lun_old_guid, len); in fcp_handle_page83()
7323 plun->lun_old_guid_size = 0; in fcp_handle_page83()
7328 plun, guid)) { in fcp_handle_page83()
7368 if (fcp_symmetric_device_probe(plun) != 0) { in fcp_handle_page83()
7375 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_8); in fcp_handle_page83()
7397 mutex_enter(&plun->lun_mutex); in fcp_handle_page83()
7402 if (plun->lun_cip == NULL) { in fcp_handle_page83()
7410 plun->lun_mpxio = 0; in fcp_handle_page83()
7412 plun->lun_mpxio = 1; in fcp_handle_page83()
7415 mutex_exit(&plun->lun_mutex); in fcp_handle_page83()
7419 plun->lun_state &= in fcp_handle_page83()
7444 struct fcp_lun *plun; in fcp_handle_inquiry() local
7454 plun = icmd->ipkt_lun; in fcp_handle_inquiry()
7456 FCP_CP_IN(fpkt->pkt_data, &plun->lun_inq, fpkt->pkt_data_acc, in fcp_handle_inquiry()
7459 dtype = plun->lun_inq.inq_dtype & DTYPE_MASK; in fcp_handle_inquiry()
7460 pqual = plun->lun_inq.inq_dtype >> 5; in fcp_handle_inquiry()
7466 plun->lun_num, dtype, pqual); in fcp_handle_inquiry()
7475 ptgt->tgt_d_id, plun->lun_num, dtype, pqual); in fcp_handle_inquiry()
7481 ptgt->tgt_d_id, plun->lun_num, dtype, pqual); in fcp_handle_inquiry()
7483 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_3); in fcp_handle_inquiry()
7497 if ((plun->lun_state & FCP_LUN_INIT) && dtype != plun->lun_type) { in fcp_handle_inquiry()
7498 plun->lun_state |= FCP_LUN_CHANGED; in fcp_handle_inquiry()
7500 plun->lun_type = plun->lun_inq.inq_dtype; in fcp_handle_inquiry()
7508 if (bcmp(plun->lun_inq.inq_pid, pid, strlen(pid)) == 0) { in fcp_handle_inquiry()
7527 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_5); in fcp_handle_inquiry()
7545 if (fcp_send_scsi(plun, SCMD_INQUIRY_PAGE83, in fcp_handle_inquiry()
7550 FCP_LUN_TRACE(plun, FCP_LUN_TRACE_6); in fcp_handle_inquiry()
7585 struct fcp_lun *plun; in fcp_handle_reportlun() local
7645 struct fcp_lun *plun; in fcp_handle_reportlun() local
7648 plun = ptgt->tgt_lun; in fcp_handle_reportlun()
7649 ASSERT(plun != NULL); in fcp_handle_reportlun()
7703 for (plun = ptgt->tgt_lun; plun; plun = plun->lun_next) { in fcp_handle_reportlun()
7707 offline = (plun->lun_state & FCP_LUN_OFFLINE) ? 1 : 0; in fcp_handle_reportlun()
7720 if (plun->lun_num == lun_num) { in fcp_handle_reportlun()
7740 if (!(plun->lun_state & in fcp_handle_reportlun()
7742 plun->lun_state |= FCP_LUN_DISAPPEARED; in fcp_handle_reportlun()
7746 if (!(plun->lun_state & in fcp_handle_reportlun()
7750 plun->lun_num, ptgt->tgt_d_id); in fcp_handle_reportlun()
7772 if (plun->lun_state & FCP_LUN_DEVICE_NOT_CONNECTED) { in fcp_handle_reportlun()
7773 plun->lun_state &= in fcp_handle_reportlun()
7776 if (offline || plun->lun_num == 0) { in fcp_handle_reportlun()
7777 if (plun->lun_state & FCP_LUN_DISAPPEARED) { in fcp_handle_reportlun()
7778 plun->lun_state &= ~FCP_LUN_DISAPPEARED; in fcp_handle_reportlun()
7782 plun->lun_num, ptgt->tgt_d_id); in fcp_handle_reportlun()
7828 if ((plun = fcp_get_lun(ptgt, lun_num)) == NULL) { in fcp_handle_reportlun()
7829 plun = fcp_alloc_lun(ptgt); in fcp_handle_reportlun()
7830 if (plun == NULL) { in fcp_handle_reportlun()
7839 mutex_enter(&plun->lun_tgt->tgt_mutex); in fcp_handle_reportlun()
7841 plun->lun_addr.ent_addr_0 = in fcp_handle_reportlun()
7843 plun->lun_addr.ent_addr_1 = in fcp_handle_reportlun()
7845 plun->lun_addr.ent_addr_2 = in fcp_handle_reportlun()
7847 plun->lun_addr.ent_addr_3 = in fcp_handle_reportlun()
7850 plun->lun_num = lun_num; in fcp_handle_reportlun()
7851 plun->lun_state |= FCP_LUN_BUSY | FCP_LUN_MARK; in fcp_handle_reportlun()
7852 plun->lun_state &= ~FCP_LUN_OFFLINE; in fcp_handle_reportlun()
7853 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_handle_reportlun()
7864 if (fcp_send_scsi(plun, SCMD_INQUIRY, SUN_INQSIZE, in fcp_handle_reportlun()
7868 mutex_enter(&plun->lun_tgt->tgt_mutex); in fcp_handle_reportlun()
7873 ptgt->tgt_d_id, plun->lun_num); in fcp_handle_reportlun()
7882 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_handle_reportlun()
7923 struct fcp_lun *plun; in fcp_get_lun() local
7926 for (plun = ptgt->tgt_lun; plun != NULL; plun = plun->lun_next) { in fcp_get_lun()
7927 if (plun->lun_num == lun_num) { in fcp_get_lun()
7929 return (plun); in fcp_get_lun()
8062 struct fcp_lun *plun; in fcp_create_luns() local
8074 for (plun = ptgt->tgt_lun; plun != NULL; plun = plun->lun_next) { in fcp_create_luns()
8075 if (plun->lun_state & FCP_LUN_OFFLINE) { in fcp_create_luns()
8079 if (plun->lun_state & FCP_LUN_MARK) { in fcp_create_luns()
8083 fcp_offline_lun(plun, link_cnt, tgt_cnt, 1, 0); in fcp_create_luns()
8087 plun->lun_state &= ~FCP_LUN_BUSY; in fcp_create_luns()
8094 if (plun->lun_mpxio && plun->lun_cip && in fcp_create_luns()
8095 (!fcp_pass_to_hp(pptr, plun, plun->lun_cip, in fcp_create_luns()
8101 plun); in fcp_create_luns()
8104 if (plun->lun_state & FCP_LUN_INIT && in fcp_create_luns()
8105 !(plun->lun_state & FCP_LUN_CHANGED)) { in fcp_create_luns()
8122 if (plun->lun_cip && (plun->lun_state & FCP_LUN_CHANGED)) { in fcp_create_luns()
8123 fcp_prepare_offline_lun(plun, link_cnt, tgt_cnt); in fcp_create_luns()
8127 if (!fcp_pass_to_hp(pptr, plun, cip, FCP_ONLINE, in fcp_create_luns()
8136 if (!fcp_pass_to_hp(pptr, plun, cip, FCP_ONLINE, in fcp_create_luns()
8140 plun->lun_tgt->tgt_d_id, plun->lun_num); in fcp_create_luns()
8151 fcp_trigger_lun(struct fcp_lun *plun, child_info_t *cip, int old_mpxio, in fcp_trigger_lun() argument
8157 struct fcp_port *pptr = plun->lun_tgt->tgt_port; in fcp_trigger_lun()
8162 if ((old_mpxio != 0) && (plun->lun_mpxio != old_mpxio)) { in fcp_trigger_lun()
8169 "plun: %p, cip: %p, what:%d", plun, cip, online); in fcp_trigger_lun()
8177 plun, LUN_TGT->tgt_d_id, plun->lun_num, cip, online, flags, in fcp_trigger_lun()
8178 plun->lun_mpxio); in fcp_trigger_lun()
8192 if (plun->lun_mpxio) { in fcp_trigger_lun()
8193 rval = fcp_update_mpxio_path(plun, cip, online); in fcp_trigger_lun()
8206 if (plun->lun_mpxio == 0) { in fcp_trigger_lun()
8207 if (plun->lun_cip == cip) { in fcp_trigger_lun()
8208 cdip = DIP(plun->lun_cip); in fcp_trigger_lun()
8212 } else if ((plun->lun_cip == cip) && plun->lun_cip) { in fcp_trigger_lun()
8213 cdip = mdi_pi_get_client(PIP(plun->lun_cip)); in fcp_trigger_lun()
8214 } else if ((plun->lun_cip != cip) && cip) { in fcp_trigger_lun()
8250 mutex_enter(&plun->lun_mutex); in fcp_trigger_lun()
8253 ccip = fcp_get_cip(plun, cip, lcount, tcount); in fcp_trigger_lun()
8258 if (fcp_is_child_present(plun, cip) != FC_SUCCESS) { in fcp_trigger_lun()
8265 rval = fcp_online_child(plun, ccip, lcount, tcount, flags); in fcp_trigger_lun()
8269 rval = fcp_offline_child(plun, ccip, lcount, tcount, flags); in fcp_trigger_lun()
8274 fail: mutex_exit(&plun->lun_mutex); in fcp_trigger_lun()
8358 struct fcp_lun *plun; in fcp_offline_tgt_luns() local
8363 for (plun = ptgt->tgt_lun; plun != NULL; plun = plun->lun_next) { in fcp_offline_tgt_luns()
8364 if (!(plun->lun_state & FCP_LUN_OFFLINE)) { in fcp_offline_tgt_luns()
8365 fcp_offline_lun(plun, link_cnt, tgt_cnt, 1, flags); in fcp_offline_tgt_luns()
8379 fcp_offline_lun(struct fcp_lun *plun, int link_cnt, int tgt_cnt, in fcp_offline_lun() argument
8382 struct fcp_port *pptr = plun->lun_tgt->tgt_port; in fcp_offline_lun()
8385 ASSERT(plun != NULL); in fcp_offline_lun()
8389 fcp_offline_lun_now(plun, link_cnt, tgt_cnt, flags); in fcp_offline_lun()
8399 elem->plun = plun; in fcp_offline_lun()
8401 elem->tgt_cnt = plun->lun_tgt->tgt_change_cnt; in fcp_offline_lun()
8405 fcp_offline_lun_now(plun, link_cnt, tgt_cnt, flags); in fcp_offline_lun()
8411 fcp_prepare_offline_lun(struct fcp_lun *plun, int link_cnt, int tgt_cnt) in fcp_prepare_offline_lun() argument
8419 head = fcp_scan_commands(plun); in fcp_prepare_offline_lun()
8426 if (plun->lun_cip && plun->lun_mpxio) { in fcp_prepare_offline_lun()
8430 if (!fcp_pass_to_hp(LUN_PORT, plun, plun->lun_cip, in fcp_prepare_offline_lun()
8435 LUN_TGT->tgt_d_id, plun->lun_num); in fcp_prepare_offline_lun()
8441 (void) mdi_pi_disable_path(PIP(plun->lun_cip), DRIVER_DISABLE); in fcp_prepare_offline_lun()
8447 fcp_offline_lun_now(struct fcp_lun *plun, int link_cnt, int tgt_cnt, in fcp_offline_lun_now() argument
8453 fcp_update_offline_flags(plun); in fcp_offline_lun_now()
8456 fcp_prepare_offline_lun(plun, link_cnt, tgt_cnt); in fcp_offline_lun_now()
8462 if (plun->lun_cip) { in fcp_offline_lun_now()
8465 plun->lun_num, plun->lun_trace, LUN_TGT->tgt_d_id, in fcp_offline_lun_now()
8468 if (!fcp_pass_to_hp(LUN_PORT, plun, plun->lun_cip, FCP_OFFLINE, in fcp_offline_lun_now()
8472 LUN_TGT->tgt_d_id, plun->lun_num); in fcp_offline_lun_now()
8492 struct fcp_tgt *ptgt = elem->plun->lun_tgt; in fcp_scan_offline_luns()
8501 !(elem->plun->lun_state & FCP_TGT_OFFLINE)) { in fcp_scan_offline_luns()
8502 fcp_offline_lun_now(elem->plun, in fcp_scan_offline_luns()
8582 fcp_update_offline_flags(struct fcp_lun *plun) in fcp_update_offline_flags() argument
8585 ASSERT(plun != NULL); in fcp_update_offline_flags()
8588 plun->lun_state |= FCP_LUN_OFFLINE; in fcp_update_offline_flags()
8589 plun->lun_state &= ~(FCP_LUN_INIT | FCP_LUN_BUSY | FCP_LUN_MARK); in fcp_update_offline_flags()
8591 mutex_enter(&plun->lun_mutex); in fcp_update_offline_flags()
8592 if (plun->lun_cip && plun->lun_state & FCP_SCSI_LUN_TGT_INIT) { in fcp_update_offline_flags()
8597 if (plun->lun_mpxio == 0) { in fcp_update_offline_flags()
8598 cdip = DIP(plun->lun_cip); in fcp_update_offline_flags()
8599 } else if (plun->lun_cip) { in fcp_update_offline_flags()
8600 cdip = mdi_pi_get_client(PIP(plun->lun_cip)); in fcp_update_offline_flags()
8603 mutex_exit(&plun->lun_mutex); in fcp_update_offline_flags()
8613 mutex_exit(&plun->lun_mutex); in fcp_update_offline_flags()
8624 fcp_scan_commands(struct fcp_lun *plun) in fcp_scan_commands() argument
8648 if (tlun != plun || cmd->cmd_state == FCP_PKT_ISSUED || in fcp_scan_commands()
8780 struct fcp_lun *plun; in fcp_complete_pkt() local
8828 plun = ADDR2LUN(&pkt->pkt_address); in fcp_complete_pkt()
8829 ptgt = plun->lun_tgt; in fcp_complete_pkt()
8858 ptgt->tgt_d_id, plun->lun_num, in fcp_complete_pkt()
8879 mutex_enter(&plun->lun_mutex); in fcp_complete_pkt()
8880 cip = plun->lun_cip; in fcp_complete_pkt()
8881 mutex_exit(&plun->lun_mutex); in fcp_complete_pkt()
8921 ptgt->tgt_d_id, plun->lun_num, in fcp_complete_pkt()
8981 mutex_enter(&plun->lun_mutex); in fcp_complete_pkt()
8982 cip = plun->lun_cip; in fcp_complete_pkt()
8983 mutex_exit(&plun->lun_mutex); in fcp_complete_pkt()
8996 plun = ADDR2LUN(&pkt->pkt_address); in fcp_complete_pkt()
8997 ptgt = plun->lun_tgt; in fcp_complete_pkt()
9061 mutex_enter(&plun->lun_mutex); in fcp_complete_pkt()
9062 if (plun->lun_mpxio == 0) { in fcp_complete_pkt()
9063 cdip = DIP(plun->lun_cip); in fcp_complete_pkt()
9064 } else if (plun->lun_cip) { in fcp_complete_pkt()
9065 cdip = mdi_pi_get_client(PIP(plun->lun_cip)); in fcp_complete_pkt()
9068 mutex_exit(&plun->lun_mutex); in fcp_complete_pkt()
9089 if ((plun->lun_type == DTYPE_SEQUENTIAL) || in fcp_complete_pkt()
9090 (plun->lun_type == DTYPE_CHANGER)) { in fcp_complete_pkt()
9125 mutex_enter(&plun->lun_mutex); in fcp_complete_pkt()
9126 if (plun->lun_mpxio == 0) { in fcp_complete_pkt()
9127 cdip = DIP(plun->lun_cip); in fcp_complete_pkt()
9128 } else if (plun->lun_cip) { in fcp_complete_pkt()
9130 PIP(plun->lun_cip)); in fcp_complete_pkt()
9132 mutex_exit(&plun->lun_mutex); in fcp_complete_pkt()
9185 if (((plun->lun_type & DTYPE_MASK) == in fcp_complete_pkt()
9339 struct fcp_lun *plun; in fcp_alloc_lun() local
9341 plun = kmem_zalloc(sizeof (struct fcp_lun), KM_NOSLEEP); in fcp_alloc_lun()
9342 if (plun != NULL) { in fcp_alloc_lun()
9347 mutex_init(&plun->lun_mutex, NULL, MUTEX_DRIVER, NULL); in fcp_alloc_lun()
9348 plun->lun_tgt = ptgt; in fcp_alloc_lun()
9351 plun->lun_next = ptgt->tgt_lun; in fcp_alloc_lun()
9352 ptgt->tgt_lun = plun; in fcp_alloc_lun()
9353 plun->lun_old_guid = NULL; in fcp_alloc_lun()
9354 plun->lun_old_guid_size = 0; in fcp_alloc_lun()
9358 return (plun); in fcp_alloc_lun()
9373 fcp_dealloc_lun(struct fcp_lun *plun) in fcp_dealloc_lun() argument
9375 mutex_enter(&plun->lun_mutex); in fcp_dealloc_lun()
9376 if (plun->lun_cip) { in fcp_dealloc_lun()
9377 fcp_remove_child(plun); in fcp_dealloc_lun()
9379 mutex_exit(&plun->lun_mutex); in fcp_dealloc_lun()
9381 mutex_destroy(&plun->lun_mutex); in fcp_dealloc_lun()
9382 if (plun->lun_guid) { in fcp_dealloc_lun()
9383 kmem_free(plun->lun_guid, plun->lun_guid_size); in fcp_dealloc_lun()
9385 if (plun->lun_old_guid) { in fcp_dealloc_lun()
9386 kmem_free(plun->lun_old_guid, plun->lun_old_guid_size); in fcp_dealloc_lun()
9388 kmem_free(plun, sizeof (*plun)); in fcp_dealloc_lun()
10821 struct fcp_lun *plun; in fcp_phys_tgt_init() local
10867 if ((plun = fcp_lookup_lun(pptr, bytes, lun_num)) == NULL) { in fcp_phys_tgt_init()
10879 ASSERT(bcmp(plun->lun_tgt->tgt_port_wwn.raw_wwn, bytes, in fcp_phys_tgt_init()
10881 ASSERT(plun->lun_num == lun_num); in fcp_phys_tgt_init()
10885 ptgt = plun->lun_tgt; in fcp_phys_tgt_init()
10888 plun->lun_tgt_count++; in fcp_phys_tgt_init()
10889 scsi_device_hba_private_set(sd, plun); in fcp_phys_tgt_init()
10890 plun->lun_state |= FCP_SCSI_LUN_TGT_INIT; in fcp_phys_tgt_init()
10891 plun->lun_sd = sd; in fcp_phys_tgt_init()
10907 struct fcp_lun *plun; in fcp_virt_tgt_init() local
10958 if ((plun = fcp_lookup_lun(pptr, bytes, lun_num)) == NULL) { in fcp_virt_tgt_init()
10970 ASSERT(bcmp(plun->lun_tgt->tgt_port_wwn.raw_wwn, bytes, in fcp_virt_tgt_init()
10972 ASSERT(plun->lun_num == lun_num); in fcp_virt_tgt_init()
10976 ptgt = plun->lun_tgt; in fcp_virt_tgt_init()
10979 plun->lun_tgt_count++; in fcp_virt_tgt_init()
10980 scsi_device_hba_private_set(sd, plun); in fcp_virt_tgt_init()
10981 plun->lun_state |= FCP_SCSI_LUN_TGT_INIT; in fcp_virt_tgt_init()
10982 plun->lun_sd = sd; in fcp_virt_tgt_init()
11026 struct fcp_lun *plun = scsi_device_hba_private_get(sd); in fcp_scsi_tgt_free() local
11035 if (plun == NULL) { in fcp_scsi_tgt_free()
11038 ptgt = plun->lun_tgt; in fcp_scsi_tgt_free()
11043 ASSERT(plun->lun_tgt_count > 0); in fcp_scsi_tgt_free()
11045 if (--plun->lun_tgt_count == 0) { in fcp_scsi_tgt_free()
11046 plun->lun_state &= ~FCP_SCSI_LUN_TGT_INIT; in fcp_scsi_tgt_free()
11048 plun->lun_sd = NULL; in fcp_scsi_tgt_free()
11070 struct fcp_lun *plun = ADDR2LUN(ap); in fcp_scsi_start() local
11072 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_scsi_start()
11080 "fcp_transport Invoked for %x", plun->lun_tgt->tgt_d_id); in fcp_scsi_start()
11094 if ((plun->lun_state & FCP_LUN_OFFLINE) && in fcp_scsi_start()
11095 !(plun->lun_state & FCP_LUN_ONLINING)) { in fcp_scsi_start()
11129 if (((plun->lun_state & FCP_LUN_BUSY) && (!(pptr->port_state & in fcp_scsi_start()
11188 fcp_prepare_pkt(pptr, cmd, plun); in fcp_scsi_start()
11215 "fcp_transport success for %x", plun->lun_tgt->tgt_d_id); in fcp_scsi_start()
11237 if (plun->lun_state & FCP_LUN_OFFLINE) { in fcp_scsi_start()
11240 mutex_enter(&plun->lun_mutex); in fcp_scsi_start()
11241 cip = plun->lun_cip; in fcp_scsi_start()
11242 mutex_exit(&plun->lun_mutex); in fcp_scsi_start()
11247 plun->lun_tgt->tgt_d_id, rval, cip); in fcp_scsi_start()
11277 struct fcp_lun *plun = ADDR2LUN(ap); in fcp_scsi_abort() local
11278 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_scsi_abort()
11285 fcp_abort_all(pptr, ptgt, plun, tgt_cnt); in fcp_scsi_abort()
11301 struct fcp_lun *plun = ADDR2LUN(ap); in fcp_scsi_reset() local
11302 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_scsi_reset()
11381 struct fcp_lun *plun; in fcp_pkt_setup() local
11388 plun = ADDR2LUN(&pkt->pkt_address); in fcp_pkt_setup()
11389 ptgt = plun->lun_tgt; in fcp_pkt_setup()
11464 mutex_enter(&plun->lun_mutex); in fcp_pkt_setup()
11465 if ((cmd->cmd_forw = plun->lun_pkt_head) != NULL) { in fcp_pkt_setup()
11466 plun->lun_pkt_head->cmd_back = cmd; in fcp_pkt_setup()
11468 plun->lun_pkt_tail = cmd; in fcp_pkt_setup()
11470 plun->lun_pkt_head = cmd; in fcp_pkt_setup()
11471 mutex_exit(&plun->lun_mutex); in fcp_pkt_setup()
11491 struct fcp_lun *plun = ADDR2LUN(&pkt->pkt_address); in fcp_pkt_teardown() local
11497 mutex_enter(&plun->lun_mutex); in fcp_pkt_teardown()
11499 ASSERT(cmd != plun->lun_pkt_head); in fcp_pkt_teardown()
11502 ASSERT(cmd == plun->lun_pkt_head); in fcp_pkt_teardown()
11503 plun->lun_pkt_head = cmd->cmd_forw; in fcp_pkt_teardown()
11509 ASSERT(cmd == plun->lun_pkt_tail); in fcp_pkt_teardown()
11510 plun->lun_pkt_tail = cmd->cmd_back; in fcp_pkt_teardown()
11513 mutex_exit(&plun->lun_mutex); in fcp_pkt_teardown()
11624 struct fcp_lun *plun = ADDR2LUN(ap); in fcp_reset_target() local
11625 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_reset_target()
11649 if (plun->lun_state & (FCP_LUN_OFFLINE | FCP_LUN_BUSY)) { in fcp_reset_target()
11654 fcp_update_lun_state(plun, FCP_SET, FCP_LUN_BUSY); in fcp_reset_target()
11656 (void) sprintf(lun_id, ", LUN=%d", plun->lun_num); in fcp_reset_target()
11683 fcp_prepare_pkt(pptr, cmd, plun); in fcp_reset_target()
11769 fcp_update_lun_state(plun, FCP_RESET, FCP_LUN_BUSY); in fcp_reset_target()
11782 p->lun = plun; in fcp_reset_target()
11813 struct fcp_lun *plun = ADDR2LUN(ap); in fcp_commoncap() local
11814 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_commoncap()
11847 plun->lun_cap |= FCP_LUN_CAP_RESET; in fcp_commoncap()
11849 plun->lun_cap &= ~FCP_LUN_CAP_RESET; in fcp_commoncap()
11917 rval = ((plun->lun_cap & FCP_LUN_CAP_RESET) != 0) ? in fcp_commoncap()
11966 struct fcp_lun *plun; in fcp_scsi_get_name() local
12006 if ((plun = fcp_lookup_lun(pptr, barray, lun_num)) == NULL) { in fcp_scsi_get_name()
12010 ptgt = plun->lun_tgt; in fcp_scsi_get_name()
12072 struct fcp_lun *plun = ADDR2LUN(&sd->sd_address); in fcp_scsi_get_bus_addr() local
12076 if (plun == NULL) { in fcp_scsi_get_bus_addr()
12080 if ((ptgt = plun->lun_tgt) == NULL) { in fcp_scsi_get_bus_addr()
12105 struct fcp_lun *plun; in fcp_linkreset() local
12134 plun = ADDR2LUN(ap); in fcp_linkreset()
12135 ptgt = plun->lun_tgt; in fcp_linkreset()
12376 struct fcp_lun *plun = elem->lun; in fcp_hp_task() local
12386 mutex_enter(&plun->lun_mutex); in fcp_hp_task()
12388 plun->lun_event_count != elem->event_cnt) || in fcp_hp_task()
12391 mutex_exit(&plun->lun_mutex); in fcp_hp_task()
12396 mutex_exit(&plun->lun_mutex); in fcp_hp_task()
12399 result = fcp_trigger_lun(plun, elem->cip, elem->old_lun_mpxio, in fcp_hp_task()
12406 fcp_get_cip(struct fcp_lun *plun, child_info_t *cip, int lcount, in fcp_get_cip() argument
12409 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_get_cip()
12411 if (fcp_is_child_present(plun, cip) == FC_FAILURE) { in fcp_get_cip()
12412 struct fcp_port *pptr = plun->lun_tgt->tgt_port; in fcp_get_cip()
12419 if (pptr->port_mpxio == 0 || plun->lun_mpxio == 0) { in fcp_get_cip()
12420 plun->lun_cip = in fcp_get_cip()
12421 CIP(fcp_create_dip(plun, lcount, tcount)); in fcp_get_cip()
12422 plun->lun_mpxio = 0; in fcp_get_cip()
12424 plun->lun_cip = in fcp_get_cip()
12425 CIP(fcp_create_pip(plun, lcount, tcount)); in fcp_get_cip()
12426 plun->lun_mpxio = 1; in fcp_get_cip()
12429 plun->lun_cip = cip; in fcp_get_cip()
12432 return (plun->lun_cip); in fcp_get_cip()
12437 fcp_is_dip_present(struct fcp_lun *plun, dev_info_t *cdip) in fcp_is_dip_present() argument
12443 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_is_dip_present()
12445 pdip = plun->lun_tgt->tgt_port->port_dip; in fcp_is_dip_present()
12447 if (plun->lun_cip == NULL) { in fcp_is_dip_present()
12452 plun, plun->lun_state, plun->lun_num, in fcp_is_dip_present()
12453 plun->lun_tgt->tgt_port->port_state); in fcp_is_dip_present()
12470 fcp_is_child_present(struct fcp_lun *plun, child_info_t *cip) in fcp_is_child_present() argument
12474 ASSERT(plun != NULL); in fcp_is_child_present()
12475 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_is_child_present()
12477 if (plun->lun_mpxio == 0) { in fcp_is_child_present()
12478 rval = fcp_is_dip_present(plun, DIP(cip)); in fcp_is_child_present()
12480 rval = fcp_is_pip_present(plun, PIP(cip)); in fcp_is_child_present()
12502 fcp_create_dip(struct fcp_lun *plun, int link_cnt, int tgt_cnt) in fcp_create_dip() argument
12507 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_create_dip()
12511 dev_info_t *old_dip = DIP(plun->lun_cip); in fcp_create_dip()
12518 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_create_dip()
12529 scsi_hba_nodename_compatible_get(&plun->lun_inq, scsi_binding_set, in fcp_create_dip()
12530 plun->lun_inq.inq_dtype, NULL, &nname, &compatible, &ncompatible); in fcp_create_dip()
12548 ptgt->tgt_port_wwn.raw_wwn[7], plun->lun_num, in fcp_create_dip()
12555 cdip = fcp_find_existing_dip(plun, pdip, nname); in fcp_create_dip()
12566 plun->lun_state & FCP_LUN_CHANGED)) { in fcp_create_dip()
12567 plun->lun_state &= ~(FCP_LUN_INIT); in fcp_create_dip()
12568 mutex_exit(&plun->lun_mutex); in fcp_create_dip()
12572 (void) fcp_pass_to_hp(pptr, plun, CIP(old_dip), FCP_OFFLINE, in fcp_create_dip()
12590 mutex_enter(&plun->lun_mutex); in fcp_create_dip()
12593 if (cdip == NULL || plun->lun_state & FCP_LUN_CHANGED) { in fcp_create_dip()
12594 plun->lun_state &= ~(FCP_LUN_CHANGED); in fcp_create_dip()
12659 (int)plun->lun_num) != DDI_PROP_SUCCESS) { in fcp_create_dip()
12663 bcopy(&plun->lun_addr, &sam_lun, FCP_LUN_SIZE); in fcp_create_dip()
12697 fcp_create_pip(struct fcp_lun *plun, int lcount, int tcount) in fcp_create_pip() argument
12705 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_create_pip()
12709 mdi_pathinfo_t *old_pip = PIP(plun->lun_cip); in fcp_create_pip()
12716 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_create_pip()
12722 scsi_hba_nodename_compatible_get(&plun->lun_inq, scsi_binding_set, in fcp_create_pip()
12723 plun->lun_inq.inq_dtype, NULL, &nname, &compatible, &ncompatible); in fcp_create_pip()
12738 ptgt->tgt_port_wwn.raw_wwn[7], plun->lun_num, in fcp_create_pip()
12745 pip = fcp_find_existing_pip(plun, pdip); in fcp_create_pip()
12756 plun->lun_state & FCP_LUN_CHANGED)) { in fcp_create_pip()
12757 plun->lun_state &= ~(FCP_LUN_INIT); in fcp_create_pip()
12758 mutex_exit(&plun->lun_mutex); in fcp_create_pip()
12762 (void) fcp_pass_to_hp(pptr, plun, CIP(old_pip), in fcp_create_pip()
12780 mutex_enter(&plun->lun_mutex); in fcp_create_pip()
12797 buf, plun->lun_num); in fcp_create_pip()
12799 if (pip == NULL || plun->lun_state & FCP_LUN_CHANGED) { in fcp_create_pip()
12813 plun->lun_state &= ~(FCP_LUN_CHANGED); in fcp_create_pip()
12815 mutex_exit(&plun->lun_mutex); in fcp_create_pip()
12817 if (mdi_pi_alloc_compatible(pdip, nname, plun->lun_guid, in fcp_create_pip()
12820 "!path alloc failed:0x%x", plun); in fcp_create_pip()
12822 mutex_enter(&plun->lun_mutex); in fcp_create_pip()
12828 mutex_enter(&plun->lun_mutex); in fcp_create_pip()
12834 mdi_pi_set_phci_private(pip, (caddr_t)plun); in fcp_create_pip()
12878 if (mdi_prop_update_int(pip, LUN_PROP, (int)plun->lun_num) in fcp_create_pip()
12883 bcopy(&plun->lun_addr, &sam_lun, FCP_LUN_SIZE); in fcp_create_pip()
12895 mutex_exit(&plun->lun_mutex); in fcp_create_pip()
12899 mutex_enter(&plun->lun_mutex); in fcp_create_pip()
12907 fcp_find_existing_dip(struct fcp_lun *plun, dev_info_t *pdip, caddr_t name) in fcp_find_existing_dip() argument
12916 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_find_existing_dip()
13019 if (plun->lun_num == (uint16_t)*words) { in fcp_find_existing_dip()
13032 fcp_is_pip_present(struct fcp_lun *plun, mdi_pathinfo_t *pip) in fcp_is_pip_present() argument
13039 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_is_pip_present()
13041 pdip = plun->lun_tgt->tgt_port->port_dip; in fcp_is_pip_present()
13065 plun, plun->lun_state, plun->lun_num, in fcp_is_pip_present()
13066 plun->lun_tgt->tgt_port->port_state); in fcp_is_pip_present()
13070 fcp_wwn_to_ascii(plun->lun_tgt->tgt_port_wwn.raw_wwn, buf); in fcp_is_pip_present()
13072 (void) snprintf(uaddr, MAXNAMELEN, "w%s,%x", buf, plun->lun_num); in fcp_is_pip_present()
13074 if (plun->lun_old_guid) { in fcp_is_pip_present()
13075 if (mdi_pi_find(pdip, plun->lun_old_guid, uaddr) == pip) { in fcp_is_pip_present()
13079 if (mdi_pi_find(pdip, plun->lun_guid, uaddr) == pip) { in fcp_is_pip_present()
13087 fcp_find_existing_pip(struct fcp_lun *plun, dev_info_t *pdip) in fcp_find_existing_pip() argument
13092 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_find_existing_pip()
13098 (void) snprintf(uaddr, MAXNAMELEN, "w%s,%x", buf, plun->lun_num); in fcp_find_existing_pip()
13100 pip = mdi_pi_find(pdip, plun->lun_guid, uaddr); in fcp_find_existing_pip()
13107 fcp_online_child(struct fcp_lun *plun, child_info_t *cip, int lcount, in fcp_online_child() argument
13111 struct fcp_port *pptr = plun->lun_tgt->tgt_port; in fcp_online_child()
13112 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_online_child()
13116 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_online_child()
13118 if (plun->lun_cip == NULL) { in fcp_online_child()
13123 plun, plun->lun_state, plun->lun_num, in fcp_online_child()
13124 plun->lun_tgt->tgt_port->port_state); in fcp_online_child()
13128 if (plun->lun_mpxio == 0) { in fcp_online_child()
13130 mutex_exit(&plun->lun_mutex); in fcp_online_child()
13136 ddi_get_name(cdip), ptgt->tgt_d_id, plun->lun_num); in fcp_online_child()
13162 plun->lun_state |= FCP_LUN_INIT; in fcp_online_child()
13169 plun->lun_num, rval); in fcp_online_child()
13176 plun->lun_num, rval); in fcp_online_child()
13180 mutex_exit(&plun->lun_mutex); in fcp_online_child()
13186 ddi_get_name(cdip), ptgt->tgt_d_id, plun->lun_num); in fcp_online_child()
13202 plun->lun_state |= FCP_LUN_INIT; in fcp_online_child()
13219 mutex_enter(&plun->lun_mutex); in fcp_online_child()
13220 plun->lun_mpxio = 0; in fcp_online_child()
13221 plun->lun_cip = NULL; in fcp_online_child()
13222 cdip = fcp_create_dip(plun, lcount, tcount); in fcp_online_child()
13223 plun->lun_cip = cip = CIP(cdip); in fcp_online_child()
13227 "Create devinfo failed for LU=%p", plun); in fcp_online_child()
13228 mutex_exit(&plun->lun_mutex); in fcp_online_child()
13231 plun->lun_state |= FCP_LUN_OFFLINE; in fcp_online_child()
13245 cip, plun); in fcp_online_child()
13246 mutex_exit(&plun->lun_mutex); in fcp_online_child()
13253 mutex_enter(&plun->lun_mutex); in fcp_online_child()
13262 plun->lun_num, rval); in fcp_online_child()
13278 mutex_enter(&plun->lun_mutex); in fcp_online_child()
13284 fcp_offline_child(struct fcp_lun *plun, child_info_t *cip, int lcount, in fcp_offline_child() argument
13289 struct fcp_port *pptr = plun->lun_tgt->tgt_port; in fcp_offline_child()
13290 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_offline_child()
13293 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_offline_child()
13296 if (plun->lun_cip == NULL) { in fcp_offline_child()
13301 plun, plun->lun_state, plun->lun_num, in fcp_offline_child()
13302 plun->lun_tgt->tgt_port->port_state); in fcp_offline_child()
13310 lun_mpxio = plun->lun_mpxio; in fcp_offline_child()
13314 mutex_exit(&plun->lun_mutex); in fcp_offline_child()
13325 mutex_exit(&plun->lun_mutex); in fcp_offline_child()
13344 plun->lun_state &= ~FCP_LUN_INIT; in fcp_offline_child()
13350 mutex_enter(&plun->lun_mutex); in fcp_offline_child()
13362 if (plun->lun_cip == cip) { in fcp_offline_child()
13363 plun->lun_cip = NULL; in fcp_offline_child()
13365 if (plun->lun_old_guid) { in fcp_offline_child()
13366 kmem_free(plun->lun_old_guid, in fcp_offline_child()
13367 plun->lun_old_guid_size); in fcp_offline_child()
13368 plun->lun_old_guid = NULL; in fcp_offline_child()
13369 plun->lun_old_guid_size = 0; in fcp_offline_child()
13371 mutex_exit(&plun->lun_mutex); in fcp_offline_child()
13395 mutex_enter(&plun->lun_mutex); in fcp_offline_child()
13401 ddi_get_name(cdip), ptgt->tgt_d_id, plun->lun_num); in fcp_offline_child()
13408 fcp_remove_child(struct fcp_lun *plun) in fcp_remove_child() argument
13413 ASSERT(MUTEX_HELD(&plun->lun_mutex)); in fcp_remove_child()
13415 if (fcp_is_child_present(plun, plun->lun_cip) == FC_SUCCESS) { in fcp_remove_child()
13416 if (plun->lun_mpxio == 0) { in fcp_remove_child()
13417 (void) ndi_prop_remove_all(DIP(plun->lun_cip)); in fcp_remove_child()
13418 (void) ndi_devi_free(DIP(plun->lun_cip)); in fcp_remove_child()
13419 plun->lun_cip = NULL; in fcp_remove_child()
13428 cip = plun->lun_cip; in fcp_remove_child()
13429 plun->lun_cip = NULL; in fcp_remove_child()
13431 mutex_exit(&plun->lun_mutex); in fcp_remove_child()
13432 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_remove_child()
13433 mutex_exit(&plun->lun_tgt->tgt_port->port_mutex); in fcp_remove_child()
13436 plun->lun_tgt->tgt_port->port_dip, &enteredv); in fcp_remove_child()
13444 plun->lun_tgt->tgt_port->port_dip); in fcp_remove_child()
13448 plun->lun_tgt->tgt_port->port_dip); in fcp_remove_child()
13452 plun->lun_tgt->tgt_port->port_dip, enteredv); in fcp_remove_child()
13455 plun->lun_tgt->tgt_port->port_instbuf, in fcp_remove_child()
13457 "lun=%p pip freed %p", plun, cip); in fcp_remove_child()
13462 mutex_enter(&plun->lun_tgt->tgt_port->port_mutex); in fcp_remove_child()
13463 mutex_enter(&plun->lun_tgt->tgt_mutex); in fcp_remove_child()
13464 mutex_enter(&plun->lun_mutex); in fcp_remove_child()
13467 plun->lun_cip = NULL; in fcp_remove_child()
13601 struct fcp_lun *plun; in fcp_watch() local
13604 plun = ADDR2LUN(&pkt->pkt_address); in fcp_watch()
13605 ptgt = plun->lun_tgt; in fcp_watch()
13798 struct fcp_lun *plun; in fcp_check_reset_delay() local
13815 plun = cur->lun; in fcp_check_reset_delay()
13821 ASSERT(plun != NULL); in fcp_check_reset_delay()
13823 ptgt = plun->lun_tgt; in fcp_check_reset_delay()
13857 fcp_update_lun_state(plun, in fcp_check_reset_delay()
13863 fcp_abort_all(pptr, ptgt, plun, tgt_cnt); in fcp_check_reset_delay()
13882 struct fcp_lun *plun = ADDR2LUN(&cmd->cmd_pkt->pkt_address); in fcp_abort_all() local
13883 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_abort_all()
13887 if (ptgt != ttgt && plun != rlun) { in fcp_abort_all()
14110 struct fcp_lun *plun; in fcp_lookup_lun() local
14120 for (plun = ptgt->tgt_lun; in fcp_lookup_lun()
14121 plun != NULL; in fcp_lookup_lun()
14122 plun = plun->lun_next) { in fcp_lookup_lun()
14123 if (plun->lun_num == lun) { in fcp_lookup_lun()
14125 return (plun); in fcp_lookup_lun()
14151 struct fcp_lun *plun) in fcp_prepare_pkt() argument
14154 struct fcp_tgt *ptgt = plun->lun_tgt; in fcp_prepare_pkt()
14201 fcmd->fcp_ent_addr = plun->lun_addr; in fcp_prepare_pkt()
14337 struct fcp_lun *plun; in fcp_get_lun_from_cip() local
14348 for (plun = ptgt->tgt_lun; plun != NULL; in fcp_get_lun_from_cip()
14349 plun = plun->lun_next) { in fcp_get_lun_from_cip()
14350 mutex_enter(&plun->lun_mutex); in fcp_get_lun_from_cip()
14351 if (plun->lun_cip == cip) { in fcp_get_lun_from_cip()
14352 mutex_exit(&plun->lun_mutex); in fcp_get_lun_from_cip()
14354 return (plun); /* match found */ in fcp_get_lun_from_cip()
14356 mutex_exit(&plun->lun_mutex); in fcp_get_lun_from_cip()
14375 fcp_pass_to_hp_and_wait(struct fcp_port *pptr, struct fcp_lun *plun, in fcp_pass_to_hp_and_wait() argument
14381 mutex_enter(&plun->lun_tgt->tgt_mutex); in fcp_pass_to_hp_and_wait()
14382 if ((elem = fcp_pass_to_hp(pptr, plun, cip, in fcp_pass_to_hp_and_wait()
14384 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_pass_to_hp_and_wait()
14387 what, plun->lun_tgt->tgt_d_id, plun->lun_num); in fcp_pass_to_hp_and_wait()
14390 mutex_exit(&plun->lun_tgt->tgt_mutex); in fcp_pass_to_hp_and_wait()
14421 fcp_pass_to_hp(struct fcp_port *pptr, struct fcp_lun *plun, in fcp_pass_to_hp() argument
14428 ASSERT(plun != NULL); in fcp_pass_to_hp()
14429 ASSERT(plun->lun_tgt != NULL); in fcp_pass_to_hp()
14430 ASSERT(mutex_owned(&plun->lun_tgt->tgt_mutex)); in fcp_pass_to_hp()
14442 elem->lun = plun; in fcp_pass_to_hp()
14444 elem->old_lun_mpxio = plun->lun_mpxio; in fcp_pass_to_hp()
14455 mutex_enter(&plun->lun_mutex); in fcp_pass_to_hp()
14457 plun->lun_event_count++; in fcp_pass_to_hp()
14458 elem->event_cnt = plun->lun_event_count; in fcp_pass_to_hp()
14460 mutex_exit(&plun->lun_mutex); in fcp_pass_to_hp()
14463 mutex_enter(&plun->lun_mutex); in fcp_pass_to_hp()
14465 plun->lun_event_count--; in fcp_pass_to_hp()
14467 mutex_exit(&plun->lun_mutex); in fcp_pass_to_hp()
14481 struct fcp_lun *plun; in fcp_retransport_cmd() local
14486 plun = ADDR2LUN(ap); in fcp_retransport_cmd()
14487 ptgt = plun->lun_tgt; in fcp_retransport_cmd()
14495 if (((plun->lun_state & (FCP_LUN_BUSY | FCP_LUN_OFFLINE)) == 0) && in fcp_retransport_cmd()
14524 fcp_prepare_pkt(pptr, cmd, plun); in fcp_retransport_cmd()
14838 struct fcp_lun *plun; in fcp_free_target() local
14859 plun = ptgt->tgt_lun; in fcp_free_target()
14860 while (plun != NULL) { in fcp_free_target()
14861 struct fcp_lun *next_lun = plun->lun_next; in fcp_free_target()
14863 fcp_dealloc_lun(plun); in fcp_free_target()
14864 plun = next_lun; in fcp_free_target()
14921 struct fcp_lun *plun; in fcp_create_on_demand() local
15114 if ((plun = ptgt->tgt_lun) != NULL) { in fcp_create_on_demand()
15115 tcount = plun->lun_tgt->tgt_change_cnt; in fcp_create_on_demand()
15133 while (plun) { in fcp_create_on_demand()
15136 mutex_enter(&plun->lun_mutex); in fcp_create_on_demand()
15137 cip = plun->lun_cip; in fcp_create_on_demand()
15138 mutex_exit(&plun->lun_mutex); in fcp_create_on_demand()
15141 if (!(plun->lun_state & FCP_LUN_OFFLINE)) { in fcp_create_on_demand()
15144 rval = fcp_pass_to_hp_and_wait(pptr, plun, cip, in fcp_create_on_demand()
15157 plun->lun_state &= ~(FCP_LUN_OFFLINE | in fcp_create_on_demand()
15164 plun = plun->lun_next; in fcp_create_on_demand()
15224 struct fcp_lun *plun; in fcp_print_error() local
15229 plun = icmd->ipkt_lun; in fcp_print_error()
15295 ptgt->tgt_d_id, plun->lun_num, rsp->reserved_0, in fcp_print_error()
15343 ptgt->tgt_d_id, plun->lun_num, sense_key, in fcp_print_error()
15350 ptgt->tgt_d_id, plun->lun_num, in fcp_print_error()
15364 ptgt->tgt_d_id, plun->lun_num, state, reason); in fcp_print_error()
15484 struct fcp_lun *plun; in fcp_outstanding_lun_cmds() local
15487 for (plun = ptgt->tgt_lun; plun != NULL; plun = plun->lun_next) { in fcp_outstanding_lun_cmds()
15488 mutex_enter(&plun->lun_mutex); in fcp_outstanding_lun_cmds()
15489 for (cmd = plun->lun_pkt_head; cmd != NULL; in fcp_outstanding_lun_cmds()
15492 mutex_exit(&plun->lun_mutex); in fcp_outstanding_lun_cmds()
15496 mutex_exit(&plun->lun_mutex); in fcp_outstanding_lun_cmds()
15577 struct fcp_lun *plun; in fcp_update_mpxio_path_verifybusy() local
15583 for (plun = ptgt->tgt_lun; plun != NULL; in fcp_update_mpxio_path_verifybusy()
15584 plun = plun->lun_next) { in fcp_update_mpxio_path_verifybusy()
15585 if (plun->lun_mpxio && in fcp_update_mpxio_path_verifybusy()
15586 plun->lun_state & FCP_LUN_BUSY) { in fcp_update_mpxio_path_verifybusy()
15587 if (!fcp_pass_to_hp(pptr, plun, in fcp_update_mpxio_path_verifybusy()
15588 plun->lun_cip, in fcp_update_mpxio_path_verifybusy()
15598 plun); in fcp_update_mpxio_path_verifybusy()
15608 fcp_update_mpxio_path(struct fcp_lun *plun, child_info_t *cip, int what) in fcp_update_mpxio_path() argument
15613 ASSERT(plun); in fcp_update_mpxio_path()
15615 mutex_enter(&plun->lun_mutex); in fcp_update_mpxio_path()
15616 if (fcp_is_child_present(plun, cip) == FC_FAILURE) { in fcp_update_mpxio_path()
15617 mutex_exit(&plun->lun_mutex); in fcp_update_mpxio_path()
15620 mutex_exit(&plun->lun_mutex); in fcp_update_mpxio_path()
15643 fcp_get_lun_path(struct fcp_lun *plun) in fcp_get_lun_path() argument
15649 if (plun == NULL) { in fcp_get_lun_path()
15653 mutex_enter(&plun->lun_mutex); in fcp_get_lun_path()
15654 if (plun->lun_mpxio == 0) { in fcp_get_lun_path()
15655 dip = DIP(plun->lun_cip); in fcp_get_lun_path()
15656 mutex_exit(&plun->lun_mutex); in fcp_get_lun_path()
15663 pip = PIP(plun->lun_cip); in fcp_get_lun_path()
15673 mutex_exit(&plun->lun_mutex); in fcp_get_lun_path()
15794 fcp_copy_guid_2_lun_block(struct fcp_lun *plun, char *guidp) in fcp_copy_guid_2_lun_block() argument
15802 if ((guidp == NULL) || (plun == NULL)) { in fcp_copy_guid_2_lun_block()
15818 if (plun->lun_guid) { in fcp_copy_guid_2_lun_block()
15819 if (plun->lun_guid_size != len) { in fcp_copy_guid_2_lun_block()
15825 kmem_free(plun->lun_guid, plun->lun_guid_size); in fcp_copy_guid_2_lun_block()
15826 plun->lun_guid = NULL; in fcp_copy_guid_2_lun_block()
15827 plun->lun_guid_size = 0; in fcp_copy_guid_2_lun_block()
15833 if (plun->lun_guid == NULL) { in fcp_copy_guid_2_lun_block()
15834 plun->lun_guid = kmem_zalloc(len, KM_NOSLEEP); in fcp_copy_guid_2_lun_block()
15835 if (plun->lun_guid == NULL) { in fcp_copy_guid_2_lun_block()
15841 plun->lun_guid_size = len; in fcp_copy_guid_2_lun_block()
15844 if (plun->lun_guid) { in fcp_copy_guid_2_lun_block()
15848 bcopy(guidp, plun->lun_guid, plun->lun_guid_size); in fcp_copy_guid_2_lun_block()
16244 fcp_lun_t *plun = ADDR2LUN(ap); in fcp_pseudo_start() local
16245 fcp_tgt_t *ptgt = plun->lun_tgt; in fcp_pseudo_start()
16260 fcmd->fcp_ent_addr = plun->lun_addr; in fcp_pseudo_start()