Lines Matching refs:assoc

35 	struct nvmet_fc_tgt_assoc	*assoc;
144 struct nvmet_fc_tgt_assoc *assoc;
205 nvmet_fc_makeconnid(struct nvmet_fc_tgt_assoc *assoc, u16 qid)
207 return (assoc->association_id | qid);
248 static void nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc);
249 static int nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc);
263 static void nvmet_fc_delete_target_assoc(struct nvmet_fc_tgt_assoc *assoc);
487 nvmet_fc_xmt_disconnect_assoc(struct nvmet_fc_tgt_assoc *assoc)
489 struct nvmet_fc_tgtport *tgtport = assoc->tgtport;
501 if (!tgtport->ops->ls_req || !assoc->hostport ||
502 assoc->hostport->invalid)
511 tgtport->fc_target_port.port_num, assoc->a_id);
524 lsop->hosthandle = assoc->hostport->hosthandle;
527 assoc->association_id);
534 tgtport->fc_target_port.port_num, assoc->a_id, ret);
801 nvmet_fc_alloc_target_queue(struct nvmet_fc_tgt_assoc *assoc,
815 assoc->tgtport->fc_target_port.port_num,
816 assoc->a_id, qid);
822 queue->assoc = assoc;
833 nvmet_fc_prep_fcp_iodlist(assoc->tgtport, queue);
839 WARN_ON(assoc->queues[qid]);
840 assoc->queues[qid] = queue;
845 nvmet_fc_destroy_fcp_iodlist(assoc->tgtport, queue);
859 nvmet_fc_destroy_fcp_iodlist(queue->assoc->tgtport, queue);
882 struct nvmet_fc_tgtport *tgtport = queue->assoc->tgtport;
961 struct nvmet_fc_tgt_assoc *assoc;
970 list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) {
971 if (association_id == assoc->association_id) {
972 queue = assoc->queues[qid];
1095 nvmet_fc_delete_assoc(struct nvmet_fc_tgt_assoc *assoc)
1097 nvmet_fc_delete_target_assoc(assoc);
1098 nvmet_fc_tgt_a_put(assoc);
1104 struct nvmet_fc_tgt_assoc *assoc =
1106 struct nvmet_fc_tgtport *tgtport = assoc->tgtport;
1108 nvmet_fc_delete_assoc(assoc);
1113 nvmet_fc_schedule_delete_assoc(struct nvmet_fc_tgt_assoc *assoc)
1115 nvmet_fc_tgtport_get(assoc->tgtport);
1116 queue_work(nvmet_wq, &assoc->del_work);
1122 struct nvmet_fc_tgt_assoc *assoc, *tmpassoc;
1131 assoc = kzalloc(sizeof(*assoc), GFP_KERNEL);
1132 if (!assoc)
1142 assoc->hostport = nvmet_fc_alloc_hostport(tgtport, hosthandle);
1143 if (IS_ERR(assoc->hostport))
1146 assoc->tgtport = tgtport;
1147 assoc->a_id = idx;
1148 INIT_LIST_HEAD(&assoc->a_list);
1149 kref_init(&assoc->ref);
1150 INIT_WORK(&assoc->del_work, nvmet_fc_delete_assoc_work);
1151 atomic_set(&assoc->terminating, 0);
1166 assoc->association_id = ran;
1167 list_add_tail_rcu(&assoc->a_list, &tgtport->assoc_list);
1172 return assoc;
1179 kfree(assoc);
1186 struct nvmet_fc_tgt_assoc *assoc =
1188 struct nvmet_fc_tgtport *tgtport = assoc->tgtport;
1194 if (assoc->queues[i])
1195 nvmet_fc_delete_target_queue(assoc->queues[i]);
1199 nvmet_fc_xmt_disconnect_assoc(assoc);
1201 nvmet_fc_free_hostport(assoc->hostport);
1203 oldls = assoc->rcv_disconn;
1208 ida_free(&tgtport->assoc_cnt, assoc->a_id);
1211 tgtport->fc_target_port.port_num, assoc->a_id);
1212 kfree_rcu(assoc, rcu);
1217 nvmet_fc_tgt_a_put(struct nvmet_fc_tgt_assoc *assoc)
1219 kref_put(&assoc->ref, nvmet_fc_target_assoc_free);
1223 nvmet_fc_tgt_a_get(struct nvmet_fc_tgt_assoc *assoc)
1225 return kref_get_unless_zero(&assoc->ref);
1229 nvmet_fc_delete_target_assoc(struct nvmet_fc_tgt_assoc *assoc)
1231 struct nvmet_fc_tgtport *tgtport = assoc->tgtport;
1235 terminating = atomic_xchg(&assoc->terminating, 1);
1242 list_del_rcu(&assoc->a_list);
1249 if (assoc->queues[i])
1250 flush_workqueue(assoc->queues[i]->work_q);
1255 tgtport->fc_target_port.port_num, assoc->a_id);
1262 struct nvmet_fc_tgt_assoc *assoc;
1266 list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) {
1267 if (association_id == assoc->association_id) {
1268 ret = assoc;
1269 if (!nvmet_fc_tgt_a_get(assoc))
1503 struct nvmet_fc_tgt_assoc *assoc;
1506 list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) {
1507 if (!nvmet_fc_tgt_a_get(assoc))
1509 nvmet_fc_schedule_delete_assoc(assoc);
1510 nvmet_fc_tgt_a_put(assoc);
1549 struct nvmet_fc_tgt_assoc *assoc, *next;
1554 list_for_each_entry_safe(assoc, next,
1556 if (!assoc->hostport ||
1557 assoc->hostport->hosthandle != hosthandle)
1559 if (!nvmet_fc_tgt_a_get(assoc))
1561 assoc->hostport->invalid = 1;
1563 nvmet_fc_schedule_delete_assoc(assoc);
1564 nvmet_fc_tgt_a_put(assoc);
1581 struct nvmet_fc_tgt_assoc *assoc;
1595 list_for_each_entry_rcu(assoc, &tgtport->assoc_list, a_list) {
1596 queue = assoc->queues[0];
1598 if (nvmet_fc_tgt_a_get(assoc))
1608 nvmet_fc_schedule_delete_assoc(assoc);
1609 nvmet_fc_tgt_a_put(assoc);
1695 iod->assoc = nvmet_fc_alloc_target_assoc(
1697 if (!iod->assoc)
1700 queue = nvmet_fc_alloc_target_queue(iod->assoc, 0,
1704 nvmet_fc_tgt_a_put(iod->assoc);
1726 tgtport->fc_target_port.port_num, iod->assoc->a_id);
1741 cpu_to_be64(nvmet_fc_makeconnid(iod->assoc, 0));
1786 iod->assoc = nvmet_fc_find_target_assoc(tgtport,
1788 if (!iod->assoc)
1791 queue = nvmet_fc_alloc_target_queue(iod->assoc,
1798 nvmet_fc_tgt_a_put(iod->assoc);
1831 cpu_to_be64(nvmet_fc_makeconnid(iod->assoc,
1847 struct nvmet_fc_tgt_assoc *assoc = NULL;
1856 /* match an active association - takes an assoc ref if !NULL */
1857 assoc = nvmet_fc_find_target_assoc(tgtport,
1859 iod->assoc = assoc;
1860 if (!assoc)
1864 if (ret || !assoc) {
1896 oldls = assoc->rcv_disconn;
1897 assoc->rcv_disconn = iod;
1904 tgtport->fc_target_port.port_num, assoc->a_id);
1915 nvmet_fc_schedule_delete_assoc(assoc);
1916 nvmet_fc_tgt_a_put(assoc);
1972 iod->assoc = NULL;