Lines Matching refs:lu

206 istgt_lu_access(CONN_Ptr conn, ISTGT_LU_Ptr lu, const char *iqn, const char *addr)  in istgt_lu_access()  argument
215 if (conn == NULL || lu == NULL || iqn == NULL || addr == NULL) in istgt_lu_access()
222 for (i = 0; i < lu->maxmap; i++) { in istgt_lu_access()
224 if (pg_tag != lu->map[i].pg_tag) in istgt_lu_access()
227 ig_tag = lu->map[i].ig_tag; in istgt_lu_access()
230 ISTGT_ERRLOG("LU%d: ig_tag not found\n", lu->num); in istgt_lu_access()
275 istgt_lu_visible(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu, const char *iqn, int pg_tag) in istgt_lu_visible() argument
282 if (istgt == NULL || lu == NULL || iqn == NULL) in istgt_lu_visible()
286 for (i = 0; i < lu->maxmap; i++) { in istgt_lu_visible()
287 if (lu->map[i].pg_tag == pg_tag) { in istgt_lu_visible()
296 for (i = 0; i < lu->maxmap; i++) { in istgt_lu_visible()
298 ig_tag = lu->map[i].ig_tag; in istgt_lu_visible()
301 ISTGT_ERRLOG("LU%d: ig_tag not found\n", lu->num); in istgt_lu_visible()
324 istgt_pg_visible(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu, const char *iqn, int pg_tag) in istgt_pg_visible() argument
331 if (istgt == NULL || lu == NULL || iqn == NULL) in istgt_pg_visible()
334 for (i = 0; i < lu->maxmap; i++) { in istgt_pg_visible()
335 if (lu->map[i].pg_tag == pg_tag) { in istgt_pg_visible()
346 ig_tag = lu->map[match_idx].ig_tag; in istgt_pg_visible()
350 ISTGT_ERRLOG("LU%d: ig_tag not found\n", lu->num); in istgt_pg_visible()
376 ISTGT_LU_Ptr lu; in istgt_lu_sendtargets() local
405 lu = istgt->logical_unit[i]; in istgt_lu_sendtargets()
406 if (lu == NULL) in istgt_lu_sendtargets()
409 && strcasecmp(tiqn, lu->name) != 0) { in istgt_lu_sendtargets()
412 tiqn, lu->name, iiqn, iaddr); in istgt_lu_sendtargets()
415 rc = istgt_lu_visible(istgt, lu, iiqn, conn->portal.tag); in istgt_lu_sendtargets()
419 tiqn, lu->name, iiqn, iaddr); in istgt_lu_sendtargets()
426 tiqn, lu->name, iiqn, iaddr); in istgt_lu_sendtargets()
429 "TargetName=%s\n", lu->name); in istgt_lu_sendtargets()
431 "TargetName=%s", lu->name); in istgt_lu_sendtargets()
434 for (j = 0; j < lu->maxmap; j++) { in istgt_lu_sendtargets()
435 pg_tag = lu->map[j].pg_tag; in istgt_lu_sendtargets()
438 if (lu->map[k].pg_tag == pg_tag) { in istgt_lu_sendtargets()
442 rc = istgt_pg_visible(istgt, lu, iiqn, pg_tag); in istgt_lu_sendtargets()
446 pg_tag, tiqn, lu->name, iiqn, iaddr); in istgt_lu_sendtargets()
510 ISTGT_LU_Ptr lu; in istgt_lu_find_target() local
516 lu = istgt->logical_unit[i]; in istgt_lu_find_target()
517 if (lu == NULL) in istgt_lu_find_target()
519 if (strcasecmp(target_name, lu->name) == 0) { in istgt_lu_find_target()
520 return lu; in istgt_lu_find_target()
529 istgt_lu_allocate_tsih(ISTGT_LU_Ptr lu, const char *initiator_port, int tag) in istgt_lu_allocate_tsih() argument
538 if (lu == NULL || initiator_port == NULL || tag == 0) in istgt_lu_allocate_tsih()
542 MTX_LOCK(&lu->mutex); in istgt_lu_allocate_tsih()
545 if (lu->tsih[i].initiator_port == NULL) in istgt_lu_allocate_tsih()
547 if (tag != lu->tsih[i].tag) in istgt_lu_allocate_tsih()
549 if (strcasecmp(initiator_port, lu->tsih[i].initiator_port) == 0) { in istgt_lu_allocate_tsih()
550 tsih = lu->tsih[i].tsih; in istgt_lu_allocate_tsih()
556 if (lu->maxtsih >= MAX_LU_TSIH) { in istgt_lu_allocate_tsih()
557 ISTGT_ERRLOG("LU%d: tsih is maximum\n", lu->num); in istgt_lu_allocate_tsih()
558 MTX_UNLOCK(&lu->mutex); in istgt_lu_allocate_tsih()
562 lu->last_tsih++; in istgt_lu_allocate_tsih()
563 tsih = lu->last_tsih; in istgt_lu_allocate_tsih()
569 ISTGT_ERRLOG("LU%d: retry error\n", lu->num); in istgt_lu_allocate_tsih()
570 MTX_UNLOCK(&lu->mutex); in istgt_lu_allocate_tsih()
574 if (lu->tsih[i].initiator_port != NULL in istgt_lu_allocate_tsih()
575 && lu->tsih[i].tsih == tsih) { in istgt_lu_allocate_tsih()
581 ISTGT_ERRLOG("LU%d: retry error\n", lu->num); in istgt_lu_allocate_tsih()
582 MTX_UNLOCK(&lu->mutex); in istgt_lu_allocate_tsih()
587 if (lu->tsih[i].initiator_port == NULL) { in istgt_lu_allocate_tsih()
588 lu->tsih[i].tag = tag; in istgt_lu_allocate_tsih()
589 lu->tsih[i].tsih = tsih; in istgt_lu_allocate_tsih()
590 lu->tsih[i].initiator_port = xstrdup(initiator_port); in istgt_lu_allocate_tsih()
591 lu->maxtsih++; in istgt_lu_allocate_tsih()
596 MTX_UNLOCK(&lu->mutex); in istgt_lu_allocate_tsih()
601 istgt_lu_free_tsih(ISTGT_LU_Ptr lu, uint16_t tsih, char *initiator_port) in istgt_lu_free_tsih() argument
608 if (lu == NULL || initiator_port == NULL) in istgt_lu_free_tsih()
613 MTX_LOCK(&lu->mutex); in istgt_lu_free_tsih()
615 if (lu->tsih[i].initiator_port == NULL) in istgt_lu_free_tsih()
617 if (lu->tsih[i].tsih != tsih) in istgt_lu_free_tsih()
620 if (strcasecmp(initiator_port, lu->tsih[i].initiator_port) == 0) { in istgt_lu_free_tsih()
621 lu->tsih[i].tag = 0; in istgt_lu_free_tsih()
622 lu->tsih[i].tsih = 0; in istgt_lu_free_tsih()
623 xfree(lu->tsih[i].initiator_port); in istgt_lu_free_tsih()
624 lu->tsih[i].initiator_port = NULL; in istgt_lu_free_tsih()
625 lu->maxtsih--; in istgt_lu_free_tsih()
629 MTX_UNLOCK(&lu->mutex); in istgt_lu_free_tsih()
1036 istgt_lu_set_local_settings(ISTGT_Ptr istgt, CF_SECTION *sp, ISTGT_LU_Ptr lu) in istgt_lu_set_local_settings() argument
1042 lu->MaxOutstandingR2T = lu->istgt->MaxOutstandingR2T; in istgt_lu_set_local_settings()
1044 lu->MaxOutstandingR2T = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1045 if (lu->MaxOutstandingR2T < 1) { in istgt_lu_set_local_settings()
1046 lu->MaxOutstandingR2T = DEFAULT_MAXOUTSTANDINGR2T; in istgt_lu_set_local_settings()
1049 lu->MaxOutstandingR2T); in istgt_lu_set_local_settings()
1054 lu->DefaultTime2Wait = lu->istgt->DefaultTime2Wait; in istgt_lu_set_local_settings()
1056 lu->DefaultTime2Wait = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1057 if (lu->DefaultTime2Wait < 0) { in istgt_lu_set_local_settings()
1058 lu->DefaultTime2Wait = DEFAULT_DEFAULTTIME2WAIT; in istgt_lu_set_local_settings()
1061 lu->DefaultTime2Wait); in istgt_lu_set_local_settings()
1066 lu->DefaultTime2Retain = lu->istgt->DefaultTime2Retain; in istgt_lu_set_local_settings()
1068 lu->DefaultTime2Retain = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1069 if (lu->DefaultTime2Retain < 0) { in istgt_lu_set_local_settings()
1070 lu->DefaultTime2Retain = DEFAULT_DEFAULTTIME2RETAIN; in istgt_lu_set_local_settings()
1073 lu->DefaultTime2Retain); in istgt_lu_set_local_settings()
1077 if (lu->MaxOutstandingR2T > 65535) { in istgt_lu_set_local_settings()
1079 lu->MaxOutstandingR2T); in istgt_lu_set_local_settings()
1082 if (lu->DefaultTime2Wait > 3600) { in istgt_lu_set_local_settings()
1084 lu->DefaultTime2Wait); in istgt_lu_set_local_settings()
1087 if (lu->DefaultTime2Retain > 3600) { in istgt_lu_set_local_settings()
1089 lu->DefaultTime2Retain); in istgt_lu_set_local_settings()
1095 lu->FirstBurstLength = lu->istgt->FirstBurstLength; in istgt_lu_set_local_settings()
1097 lu->FirstBurstLength = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1098 if (lu->FirstBurstLength < 0) { in istgt_lu_set_local_settings()
1099 lu->FirstBurstLength = DEFAULT_FIRSTBURSTLENGTH; in istgt_lu_set_local_settings()
1102 lu->FirstBurstLength); in istgt_lu_set_local_settings()
1107 lu->MaxBurstLength = lu->istgt->MaxBurstLength; in istgt_lu_set_local_settings()
1109 lu->MaxBurstLength = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1110 if (lu->MaxBurstLength < 0) { in istgt_lu_set_local_settings()
1111 lu->MaxBurstLength = DEFAULT_MAXBURSTLENGTH; in istgt_lu_set_local_settings()
1114 lu->MaxBurstLength); in istgt_lu_set_local_settings()
1119 lu->MaxRecvDataSegmentLength in istgt_lu_set_local_settings()
1120 = lu->istgt->MaxRecvDataSegmentLength; in istgt_lu_set_local_settings()
1122 lu->MaxRecvDataSegmentLength = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1123 if (lu->MaxRecvDataSegmentLength < 0) { in istgt_lu_set_local_settings()
1124 lu->MaxRecvDataSegmentLength in istgt_lu_set_local_settings()
1129 lu->MaxRecvDataSegmentLength); in istgt_lu_set_local_settings()
1133 if (lu->MaxBurstLength < 512) { in istgt_lu_set_local_settings()
1135 lu->MaxBurstLength); in istgt_lu_set_local_settings()
1138 if (lu->FirstBurstLength < 512) { in istgt_lu_set_local_settings()
1140 lu->FirstBurstLength); in istgt_lu_set_local_settings()
1143 if (lu->FirstBurstLength > lu->MaxBurstLength) { in istgt_lu_set_local_settings()
1145 lu->FirstBurstLength, istgt->MaxBurstLength); in istgt_lu_set_local_settings()
1148 if (lu->MaxBurstLength > 0x00ffffff) { in istgt_lu_set_local_settings()
1150 lu->MaxBurstLength); in istgt_lu_set_local_settings()
1153 if (lu->MaxRecvDataSegmentLength < 512) { in istgt_lu_set_local_settings()
1155 lu->MaxRecvDataSegmentLength); in istgt_lu_set_local_settings()
1158 if (lu->MaxRecvDataSegmentLength > 0x00ffffff) { in istgt_lu_set_local_settings()
1160 lu->MaxRecvDataSegmentLength); in istgt_lu_set_local_settings()
1166 lu->InitialR2T = lu->istgt->InitialR2T; in istgt_lu_set_local_settings()
1169 lu->InitialR2T = 1; in istgt_lu_set_local_settings()
1172 lu->InitialR2T = 0; in istgt_lu_set_local_settings()
1182 lu->InitialR2T ? "Yes" : "No"); in istgt_lu_set_local_settings()
1187 lu->ImmediateData = lu->istgt->ImmediateData; in istgt_lu_set_local_settings()
1190 lu->ImmediateData = 1; in istgt_lu_set_local_settings()
1192 lu->ImmediateData = 0; in istgt_lu_set_local_settings()
1198 lu->ImmediateData ? "Yes" : "No"); in istgt_lu_set_local_settings()
1203 lu->DataPDUInOrder = lu->istgt->DataPDUInOrder; in istgt_lu_set_local_settings()
1206 lu->DataPDUInOrder = 1; in istgt_lu_set_local_settings()
1209 lu->DataPDUInOrder = 0; in istgt_lu_set_local_settings()
1219 lu->DataPDUInOrder ? "Yes" : "No"); in istgt_lu_set_local_settings()
1224 lu->DataSequenceInOrder = lu->istgt->DataSequenceInOrder; in istgt_lu_set_local_settings()
1227 lu->DataSequenceInOrder = 1; in istgt_lu_set_local_settings()
1230 lu->DataSequenceInOrder = 0; in istgt_lu_set_local_settings()
1240 lu->DataSequenceInOrder ? "Yes" : "No"); in istgt_lu_set_local_settings()
1245 lu->ErrorRecoveryLevel = lu->istgt->ErrorRecoveryLevel; in istgt_lu_set_local_settings()
1247 lu->ErrorRecoveryLevel = (int)strtol(val, NULL, 10); in istgt_lu_set_local_settings()
1248 if (lu->ErrorRecoveryLevel < 0) { in istgt_lu_set_local_settings()
1249 lu->ErrorRecoveryLevel = DEFAULT_ERRORRECOVERYLEVEL; in istgt_lu_set_local_settings()
1250 } else if (lu->ErrorRecoveryLevel == 0) { in istgt_lu_set_local_settings()
1251 lu->ErrorRecoveryLevel = 0; in istgt_lu_set_local_settings()
1252 } else if (lu->ErrorRecoveryLevel == 1) { in istgt_lu_set_local_settings()
1254 lu->ErrorRecoveryLevel = 1; in istgt_lu_set_local_settings()
1257 lu->ErrorRecoveryLevel); in istgt_lu_set_local_settings()
1260 } else if (lu->ErrorRecoveryLevel == 2) { in istgt_lu_set_local_settings()
1262 lu->ErrorRecoveryLevel = 2; in istgt_lu_set_local_settings()
1265 lu->ErrorRecoveryLevel); in istgt_lu_set_local_settings()
1270 lu->ErrorRecoveryLevel); in istgt_lu_set_local_settings()
1284 ISTGT_LU_Ptr lu; in istgt_lu_add_unit() local
1314 lu = xmalloc(sizeof *lu); in istgt_lu_add_unit()
1315 memset(lu, 0, sizeof *lu); in istgt_lu_add_unit()
1316 lu->num = sp->num; in istgt_lu_add_unit()
1317 lu->istgt = istgt; in istgt_lu_add_unit()
1318 lu->state = ISTGT_STATE_INVALID; in istgt_lu_add_unit()
1334 ISTGT_ERRLOG("LU%d: TargetName not found\n", lu->num); in istgt_lu_add_unit()
1351 lu->name = xstrdup(buf); in istgt_lu_add_unit()
1353 lu->name); in istgt_lu_add_unit()
1357 lu->alias = NULL; in istgt_lu_add_unit()
1359 lu->alias = xstrdup(val); in istgt_lu_add_unit()
1362 lu->alias); in istgt_lu_add_unit()
1367 lu->maxmap = 0; in istgt_lu_add_unit()
1369 lu->maxmap = 0; in istgt_lu_add_unit()
1374 if (lu->maxmap >= MAX_LU_MAP) { in istgt_lu_add_unit()
1375 ISTGT_ERRLOG("LU%d: too many mapping\n", lu->num); in istgt_lu_add_unit()
1381 ISTGT_ERRLOG("LU%d: mapping error\n", lu->num); in istgt_lu_add_unit()
1387 ISTGT_ERRLOG("LU%d: mapping portal error\n", lu->num); in istgt_lu_add_unit()
1393 ISTGT_ERRLOG("LU%d: mapping initiator error\n", lu->num); in istgt_lu_add_unit()
1397 ISTGT_ERRLOG("LU%d: invalid group tag\n", lu->num); in istgt_lu_add_unit()
1405 lu->num, pg_tag_i); in istgt_lu_add_unit()
1412 lu->num, ig_tag_i); in istgt_lu_add_unit()
1418 lu->map[i].pg_tag = pg_tag_i; in istgt_lu_add_unit()
1419 lu->map[i].pg_aas = AAS_ACTIVE_OPTIMIZED; in istgt_lu_add_unit()
1421 lu->map[i].pg_aas |= AAS_STATUS_IMPLICIT; in istgt_lu_add_unit()
1422 lu->map[i].ig_tag = ig_tag_i; in istgt_lu_add_unit()
1425 lu->map[i].pg_tag, lu->map[i].ig_tag); in istgt_lu_add_unit()
1426 lu->maxmap = i + 1; in istgt_lu_add_unit()
1429 if (lu->maxmap == 0) { in istgt_lu_add_unit()
1430 ISTGT_ERRLOG("LU%d: no Mapping\n", lu->num); in istgt_lu_add_unit()
1437 lu->no_auth_chap = 0; in istgt_lu_add_unit()
1438 lu->auth_chap = 0; in istgt_lu_add_unit()
1439 lu->auth_chap_mutual = 0; in istgt_lu_add_unit()
1441 lu->no_auth_chap = 0; in istgt_lu_add_unit()
1447 lu->auth_chap = 1; in istgt_lu_add_unit()
1449 lu->auth_chap_mutual = 1; in istgt_lu_add_unit()
1451 lu->auth_chap = 0; in istgt_lu_add_unit()
1452 lu->auth_chap_mutual = 0; in istgt_lu_add_unit()
1454 lu->no_auth_chap = 1; in istgt_lu_add_unit()
1455 lu->auth_chap = 0; in istgt_lu_add_unit()
1456 lu->auth_chap_mutual = 0; in istgt_lu_add_unit()
1458 ISTGT_ERRLOG("LU%d: unknown auth\n", lu->num); in istgt_lu_add_unit()
1462 if (lu->auth_chap_mutual && !lu->auth_chap) { in istgt_lu_add_unit()
1463 ISTGT_ERRLOG("LU%d: Mutual but not CHAP\n", lu->num); in istgt_lu_add_unit()
1467 if (lu->no_auth_chap != 0) { in istgt_lu_add_unit()
1469 } else if (lu->auth_chap == 0) { in istgt_lu_add_unit()
1473 lu->auth_chap ? "CHAP" : "", in istgt_lu_add_unit()
1474 lu->auth_chap_mutual ? "Mutual" : ""); in istgt_lu_add_unit()
1479 lu->auth_group = 0; in istgt_lu_add_unit()
1488 ISTGT_ERRLOG("LU%d: auth group error\n", lu->num); in istgt_lu_add_unit()
1492 ISTGT_ERRLOG("LU%d: invalid auth group %d\n", lu->num, in istgt_lu_add_unit()
1497 lu->auth_group = ag_tag_i; in istgt_lu_add_unit()
1499 if (lu->auth_group == 0) { in istgt_lu_add_unit()
1503 lu->auth_group); in istgt_lu_add_unit()
1513 lu->header_digest = 1; in istgt_lu_add_unit()
1515 lu->data_digest = 1; in istgt_lu_add_unit()
1517 lu->header_digest = 0; in istgt_lu_add_unit()
1518 lu->data_digest = 0; in istgt_lu_add_unit()
1520 ISTGT_ERRLOG("LU%d: unknown digest\n", lu->num); in istgt_lu_add_unit()
1525 if (lu->header_digest == 0 && lu->data_digest == 0) { in istgt_lu_add_unit()
1529 lu->header_digest ? "Header" : "", in istgt_lu_add_unit()
1530 lu->data_digest ? "Data" : ""); in istgt_lu_add_unit()
1535 lu->readonly = 0; in istgt_lu_add_unit()
1537 lu->readonly = 1; in istgt_lu_add_unit()
1540 lu->readonly ? "Yes" : "No"); in istgt_lu_add_unit()
1544 ISTGT_ERRLOG("LU%d: unknown unit type\n", lu->num); in istgt_lu_add_unit()
1548 lu->type = ISTGT_LU_TYPE_PASS; in istgt_lu_add_unit()
1550 lu->type = ISTGT_LU_TYPE_DISK; in istgt_lu_add_unit()
1552 lu->type = ISTGT_LU_TYPE_DVD; in istgt_lu_add_unit()
1554 lu->type = ISTGT_LU_TYPE_TAPE; in istgt_lu_add_unit()
1556 ISTGT_ERRLOG("LU%d: unknown unit type\n", lu->num); in istgt_lu_add_unit()
1560 lu->type, val); in istgt_lu_add_unit()
1564 lu->online = 1; in istgt_lu_add_unit()
1566 lu->online = 1; in istgt_lu_add_unit()
1569 lu->online ? "Yes" : "No"); in istgt_lu_add_unit()
1575 switch (lu->type) { in istgt_lu_add_unit()
1584 snprintf(buf, sizeof buf, "%.8d", 10000000 + nbs + lu->num); in istgt_lu_add_unit()
1596 snprintf(buf, sizeof buf, "%.8d", 10000000 + nbs + lu->num); in istgt_lu_add_unit()
1609 snprintf(buf, sizeof buf, "CX%.8d", 10000000 + nbs + lu->num); in istgt_lu_add_unit()
1611 snprintf(buf, sizeof buf, "%.8d", 10000000 + nbs + lu->num); in istgt_lu_add_unit()
1624 snprintf(buf, sizeof buf, "%.8d", 10000000 + nbs + lu->num); in istgt_lu_add_unit()
1629 lu->inq_vendor = xstrdup(vendor); in istgt_lu_add_unit()
1630 lu->inq_product = xstrdup(product); in istgt_lu_add_unit()
1631 lu->inq_revision = xstrdup(revision); in istgt_lu_add_unit()
1632 lu->inq_serial = xstrdup(serial); in istgt_lu_add_unit()
1634 lu->inq_vendor, lu->inq_product, lu->inq_revision, in istgt_lu_add_unit()
1635 lu->inq_serial); in istgt_lu_add_unit()
1639 switch (lu->type) { in istgt_lu_add_unit()
1641 lu->blocklen = DEFAULT_LU_BLOCKLEN_DISK; in istgt_lu_add_unit()
1644 lu->blocklen = DEFAULT_LU_BLOCKLEN_DVD; in istgt_lu_add_unit()
1647 lu->blocklen = DEFAULT_LU_BLOCKLEN_TAPE; in istgt_lu_add_unit()
1650 lu->blocklen = DEFAULT_LU_BLOCKLEN; in istgt_lu_add_unit()
1654 lu->blocklen = (int) strtol(val, NULL, 10); in istgt_lu_add_unit()
1657 lu->blocklen); in istgt_lu_add_unit()
1661 switch (lu->type) { in istgt_lu_add_unit()
1663 lu->queue_depth = DEFAULT_LU_QUEUE_DEPTH; in istgt_lu_add_unit()
1669 lu->queue_depth = 0; in istgt_lu_add_unit()
1673 lu->queue_depth = 0; in istgt_lu_add_unit()
1674 if (lu->type == ISTGT_LU_TYPE_DISK) in istgt_lu_add_unit()
1675 lu->queue_depth = (int) strtol(val, NULL, 10); in istgt_lu_add_unit()
1677 if (lu->queue_depth < 0 || lu->queue_depth >= MAX_LU_QUEUE_DEPTH) { in istgt_lu_add_unit()
1678 ISTGT_ERRLOG("LU%d: queue depth range error\n", lu->num); in istgt_lu_add_unit()
1682 lu->queue_depth); in istgt_lu_add_unit()
1684 lu->maxlun = 0; in istgt_lu_add_unit()
1686 lu->lun[i].type = ISTGT_LU_LUN_TYPE_NONE; in istgt_lu_add_unit()
1687 lu->lun[i].rotationrate = DEFAULT_LU_ROTATIONRATE; in istgt_lu_add_unit()
1688 lu->lun[i].formfactor = DEFAULT_LU_FORMFACTOR; in istgt_lu_add_unit()
1689 lu->lun[i].readcache = 1; in istgt_lu_add_unit()
1690 lu->lun[i].writecache = 1; in istgt_lu_add_unit()
1691 lu->lun[i].serial = NULL; in istgt_lu_add_unit()
1692 lu->lun[i].spec = NULL; in istgt_lu_add_unit()
1699 snprintf(buf2, sizeof buf2, "%sL%d", lu->inq_serial, i); in istgt_lu_add_unit()
1700 lu->lun[i].serial = xstrdup(buf2); in istgt_lu_add_unit()
1710 if (lu->lun[i].type != ISTGT_LU_LUN_TYPE_NONE) { in istgt_lu_add_unit()
1711 ISTGT_ERRLOG("LU%d: duplicate LUN%d\n", lu->num, i); in istgt_lu_add_unit()
1714 lu->lun[i].type = ISTGT_LU_LUN_TYPE_DEVICE; in istgt_lu_add_unit()
1718 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1721 lu->lun[i].u.device.file = xstrdup(file); in istgt_lu_add_unit()
1723 lu->lun[i].u.device.file); in istgt_lu_add_unit()
1725 if (lu->lun[i].type != ISTGT_LU_LUN_TYPE_NONE) { in istgt_lu_add_unit()
1726 ISTGT_ERRLOG("LU%d: duplicate LUN%d\n", lu->num, i); in istgt_lu_add_unit()
1729 lu->lun[i].type = ISTGT_LU_LUN_TYPE_STORAGE; in istgt_lu_add_unit()
1734 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1739 lu->lun[i].u.storage.size = istgt_lu_get_filesize(file); in istgt_lu_add_unit()
1741 lu->lun[i].u.storage.size = istgt_lu_parse_size(size); in istgt_lu_add_unit()
1743 if (lu->lun[i].u.storage.size == 0) { in istgt_lu_add_unit()
1744 ISTGT_ERRLOG("LU%d: LUN%d: Auto size error (%s)\n", lu->num, i, file); in istgt_lu_add_unit()
1747 lu->lun[i].u.storage.fd = -1; in istgt_lu_add_unit()
1748 lu->lun[i].u.storage.file = xstrdup(file); in istgt_lu_add_unit()
1751 lu->lun[i].u.storage.file, in istgt_lu_add_unit()
1752 lu->lun[i].u.storage.size); in istgt_lu_add_unit()
1754 if (lu->lun[i].type != ISTGT_LU_LUN_TYPE_NONE) { in istgt_lu_add_unit()
1755 ISTGT_ERRLOG("LU%d: duplicate LUN%d\n", lu->num, i); in istgt_lu_add_unit()
1758 lu->lun[i].type = ISTGT_LU_LUN_TYPE_REMOVABLE; in istgt_lu_add_unit()
1764 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1772 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1775 lu->lun[i].u.removable.type = 0; in istgt_lu_add_unit()
1776 lu->lun[i].u.removable.id = 0; in istgt_lu_add_unit()
1777 lu->lun[i].u.removable.fd = -1; in istgt_lu_add_unit()
1778 lu->lun[i].u.removable.flags = mflags; in istgt_lu_add_unit()
1779 lu->lun[i].u.removable.file = xstrdup(file); in istgt_lu_add_unit()
1780 lu->lun[i].u.removable.size = msize; in istgt_lu_add_unit()
1783 lu->lun[i].u.removable.file, in istgt_lu_add_unit()
1784 lu->lun[i].u.removable.size, in istgt_lu_add_unit()
1785 lu->lun[i].u.removable.flags); in istgt_lu_add_unit()
1787 if (lu->lun[i].type == ISTGT_LU_LUN_TYPE_NONE) { in istgt_lu_add_unit()
1788 lu->lun[i].u.slot.maxslot = 0; in istgt_lu_add_unit()
1790 lu->lun[i].u.slot.present[k] = 0; in istgt_lu_add_unit()
1791 lu->lun[i].u.slot.flags[k] = 0; in istgt_lu_add_unit()
1792 lu->lun[i].u.slot.file[k] = NULL; in istgt_lu_add_unit()
1793 lu->lun[i].u.slot.size[k] = 0; in istgt_lu_add_unit()
1795 } else if (lu->lun[i].type != ISTGT_LU_LUN_TYPE_SLOT) { in istgt_lu_add_unit()
1796 ISTGT_ERRLOG("LU%d: duplicate LUN%d\n", lu->num, i); in istgt_lu_add_unit()
1799 lu->lun[i].type = ISTGT_LU_LUN_TYPE_SLOT; in istgt_lu_add_unit()
1801 ISTGT_ERRLOG("LU%d: slot number error\n", lu->num); in istgt_lu_add_unit()
1805 ISTGT_ERRLOG("LU%d: slot number range error\n", lu->num); in istgt_lu_add_unit()
1808 if (lu->lun[i].u.slot.present[slot]) { in istgt_lu_add_unit()
1809 ISTGT_ERRLOG("LU%d: duplicate slot %d\n", lu->num, slot); in istgt_lu_add_unit()
1812 lu->lun[i].u.slot.present[slot] = 1; in istgt_lu_add_unit()
1813 if (slot + 1 > lu->lun[i].u.slot.maxslot) { in istgt_lu_add_unit()
1814 lu->lun[i].u.slot.maxslot = slot + 1; in istgt_lu_add_unit()
1821 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1827 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1830 lu->lun[i].u.slot.flags[slot] = mflags; in istgt_lu_add_unit()
1831 lu->lun[i].u.slot.file[slot] = xstrdup(file); in istgt_lu_add_unit()
1832 lu->lun[i].u.slot.size[slot] = msize; in istgt_lu_add_unit()
1836 lu->lun[i].u.slot.file[slot], in istgt_lu_add_unit()
1837 lu->lun[i].u.slot.size[slot], in istgt_lu_add_unit()
1838 lu->lun[i].u.slot.flags[slot]); in istgt_lu_add_unit()
1843 ISTGT_ERRLOG("LU%d: LUN%d: format error\n", lu->num, i); in istgt_lu_add_unit()
1850 lu->num, i); in istgt_lu_add_unit()
1853 xfree(lu->lun[i].serial); in istgt_lu_add_unit()
1854 lu->lun[i].serial = xstrdup(val); in istgt_lu_add_unit()
1862 lu->lun[i].rotationrate = rpm; in istgt_lu_add_unit()
1870 lu->lun[i].formfactor = formfactor; in istgt_lu_add_unit()
1873 lu->lun[i].readcache = 1; in istgt_lu_add_unit()
1875 lu->lun[i].readcache = 0; in istgt_lu_add_unit()
1878 lu->num, i, val); in istgt_lu_add_unit()
1882 lu->lun[i].writecache = 1; in istgt_lu_add_unit()
1884 lu->lun[i].writecache = 0; in istgt_lu_add_unit()
1887 lu->num, i, val); in istgt_lu_add_unit()
1891 lu->num, i, key); in istgt_lu_add_unit()
1898 ISTGT_ERRLOG("LU%d: unknown lun type\n", lu->num); in istgt_lu_add_unit()
1902 if (lu->lun[i].type == ISTGT_LU_LUN_TYPE_SLOT) { in istgt_lu_add_unit()
1903 if (lu->lun[i].u.slot.maxslot == 0) { in istgt_lu_add_unit()
1904 ISTGT_ERRLOG("LU%d: no slot\n", lu->num); in istgt_lu_add_unit()
1908 lu->lun[i].u.slot.maxslot); in istgt_lu_add_unit()
1910 lu->maxlun = i + 1; in istgt_lu_add_unit()
1912 if (lu->maxlun == 0) { in istgt_lu_add_unit()
1913 ISTGT_ERRLOG("LU%d: no LUN\n", lu->num); in istgt_lu_add_unit()
1916 if (lu->lun[0].type == ISTGT_LU_LUN_TYPE_NONE) { in istgt_lu_add_unit()
1917 ISTGT_ERRLOG("LU%d: no LUN0\n", lu->num); in istgt_lu_add_unit()
1922 rc = istgt_lu_set_local_settings(istgt, sp, lu); in istgt_lu_add_unit()
1924 ISTGT_ERRLOG("LU%d: local setting error\n", lu->num); in istgt_lu_add_unit()
1930 lu->tsih[i].tag = 0; in istgt_lu_add_unit()
1931 lu->tsih[i].tsih = 0; in istgt_lu_add_unit()
1932 lu->tsih[i].initiator_port = NULL; in istgt_lu_add_unit()
1934 lu->maxtsih = 1; in istgt_lu_add_unit()
1935 lu->last_tsih = 0; in istgt_lu_add_unit()
1939 istgt->logical_unit[lu->num] = lu; in istgt_lu_add_unit()
1944 xfree(lu->name); in istgt_lu_add_unit()
1945 xfree(lu->alias); in istgt_lu_add_unit()
1946 xfree(lu->inq_vendor); in istgt_lu_add_unit()
1947 xfree(lu->inq_product); in istgt_lu_add_unit()
1948 xfree(lu->inq_revision); in istgt_lu_add_unit()
1950 switch (lu->lun[i].type) { in istgt_lu_add_unit()
1952 xfree(lu->lun[i].u.device.file); in istgt_lu_add_unit()
1955 xfree(lu->lun[i].u.storage.file); in istgt_lu_add_unit()
1958 xfree(lu->lun[i].u.removable.file); in istgt_lu_add_unit()
1961 for (j = 0; j < lu->lun[i].u.slot.maxslot; j++) { in istgt_lu_add_unit()
1962 xfree(lu->lun[i].u.slot.file[j]); in istgt_lu_add_unit()
1971 xfree(lu->tsih[i].initiator_port); in istgt_lu_add_unit()
1973 for (i = 0; i < lu->maxmap; i++) { in istgt_lu_add_unit()
1974 pg_tag_i = lu->map[i].pg_tag; in istgt_lu_add_unit()
1975 ig_tag_i = lu->map[i].ig_tag; in istgt_lu_add_unit()
1986 xfree(lu); in istgt_lu_add_unit()
1991 istgt_lu_del_unit(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu) in istgt_lu_del_unit() argument
1998 if (lu ==NULL) in istgt_lu_del_unit()
2000 ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "del unit %d\n", lu->num); in istgt_lu_del_unit()
2004 istgt->logical_unit[lu->num] = NULL; in istgt_lu_del_unit()
2007 xfree(lu->name); in istgt_lu_del_unit()
2008 xfree(lu->alias); in istgt_lu_del_unit()
2009 xfree(lu->inq_vendor); in istgt_lu_del_unit()
2010 xfree(lu->inq_product); in istgt_lu_del_unit()
2011 xfree(lu->inq_revision); in istgt_lu_del_unit()
2012 xfree(lu->inq_serial); in istgt_lu_del_unit()
2014 xfree(lu->lun[i].serial); in istgt_lu_del_unit()
2015 switch (lu->lun[i].type) { in istgt_lu_del_unit()
2017 xfree(lu->lun[i].u.device.file); in istgt_lu_del_unit()
2020 xfree(lu->lun[i].u.storage.file); in istgt_lu_del_unit()
2023 xfree(lu->lun[i].u.removable.file); in istgt_lu_del_unit()
2026 for (j = 0; j < lu->lun[i].u.slot.maxslot; j++) { in istgt_lu_del_unit()
2027 xfree(lu->lun[i].u.slot.file[j]); in istgt_lu_del_unit()
2036 xfree(lu->tsih[i].initiator_port); in istgt_lu_del_unit()
2038 for (i = 0; i < lu->maxmap; i++) { in istgt_lu_del_unit()
2039 pg_tag_i = lu->map[i].pg_tag; in istgt_lu_del_unit()
2040 ig_tag_i = lu->map[i].ig_tag; in istgt_lu_del_unit()
2056 static int istgt_lu_init_unit(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu) in istgt_lu_init_unit() argument
2060 rc = pthread_mutex_init(&lu->mutex, NULL); in istgt_lu_init_unit()
2062 ISTGT_ERRLOG("LU%d: mutex_init() failed\n", lu->num); in istgt_lu_init_unit()
2065 rc = pthread_mutex_init(&lu->state_mutex, &istgt->mutex_attr); in istgt_lu_init_unit()
2067 ISTGT_ERRLOG("LU%d: mutex_init() failed\n", lu->num); in istgt_lu_init_unit()
2070 rc = pthread_mutex_init(&lu->queue_mutex, &istgt->mutex_attr); in istgt_lu_init_unit()
2072 ISTGT_ERRLOG("LU%d: mutex_init() failed\n", lu->num); in istgt_lu_init_unit()
2075 rc = pthread_cond_init(&lu->queue_cond, NULL); in istgt_lu_init_unit()
2077 ISTGT_ERRLOG("LU%d: cond_init() failed\n", lu->num); in istgt_lu_init_unit()
2081 switch (lu->type) { in istgt_lu_init_unit()
2083 rc = istgt_lu_pass_init(istgt, lu); in istgt_lu_init_unit()
2085 ISTGT_ERRLOG("LU%d: lu_pass_init() failed\n", lu->num); in istgt_lu_init_unit()
2091 rc = istgt_lu_disk_init(istgt, lu); in istgt_lu_init_unit()
2093 ISTGT_ERRLOG("LU%d: lu_disk_init() failed\n", lu->num); in istgt_lu_init_unit()
2099 rc = istgt_lu_dvd_init(istgt, lu); in istgt_lu_init_unit()
2101 ISTGT_ERRLOG("LU%d: lu_dvd_init() failed\n", lu->num); in istgt_lu_init_unit()
2107 rc = istgt_lu_tape_init(istgt, lu); in istgt_lu_init_unit()
2109 ISTGT_ERRLOG("LU%d: lu_tape_init() failed\n", lu->num); in istgt_lu_init_unit()
2118 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_init_unit()
2128 ISTGT_LU_Ptr lu; in istgt_lu_init() local
2162 lu = istgt->logical_unit[i]; in istgt_lu_init()
2163 if (lu == NULL) in istgt_lu_init()
2165 rc = istgt_lu_init_unit(istgt, lu); in istgt_lu_init()
2168 ISTGT_ERRLOG("LU%d: lu_init_unit() failed\n", lu->num); in istgt_lu_init()
2171 istgt_lu_set_state(lu, ISTGT_STATE_INITIALIZED); in istgt_lu_init()
2195 static int istgt_lu_shutdown_unit(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu);
2200 ISTGT_LU_Ptr lu; in istgt_lu_reload_delete() local
2210 lu = istgt->logical_unit[i]; in istgt_lu_reload_delete()
2211 if (lu == NULL) in istgt_lu_reload_delete()
2213 rc = istgt_lu_exist_num(istgt->config, lu->num); in istgt_lu_reload_delete()
2215 istgt_lu_set_state(lu, ISTGT_STATE_SHUTDOWN); in istgt_lu_reload_delete()
2216 MTX_LOCK(&lu->mutex); in istgt_lu_reload_delete()
2217 if (lu->maxtsih > 1) { in istgt_lu_reload_delete()
2222 if (warn_num != lu->num) { in istgt_lu_reload_delete()
2223 warn_num = lu->num; in istgt_lu_reload_delete()
2225 lu->num); in istgt_lu_reload_delete()
2228 lu->num); in istgt_lu_reload_delete()
2229 MTX_UNLOCK(&lu->mutex); in istgt_lu_reload_delete()
2235 MTX_UNLOCK(&lu->mutex); in istgt_lu_reload_delete()
2236 rc = istgt_lu_shutdown_unit(istgt, lu); in istgt_lu_reload_delete()
2238 ISTGT_ERRLOG("LU%d: lu_shutdown_unit() failed\n", lu->num); in istgt_lu_reload_delete()
2241 ISTGT_NOTICELOG("delete LU%d: Name=%s\n", lu->num, lu->name); in istgt_lu_reload_delete()
2242 xfree(lu); in istgt_lu_reload_delete()
2298 static int istgt_lu_create_thread(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu);
2303 ISTGT_LU_Ptr lu; in istgt_lu_reload_update() local
2326 lu = istgt->logical_unit[sp->num]; in istgt_lu_reload_update()
2327 if (lu != NULL) in istgt_lu_reload_update()
2338 lu = istgt->logical_unit[sp->num]; in istgt_lu_reload_update()
2339 if (lu == NULL) { in istgt_lu_reload_update()
2344 rc = istgt_lu_init_unit(istgt, lu); in istgt_lu_reload_update()
2350 istgt_lu_set_state(lu, ISTGT_STATE_INITIALIZED); in istgt_lu_reload_update()
2352 rc = istgt_lu_create_thread(istgt, lu); in istgt_lu_reload_update()
2358 istgt_lu_set_state(lu, ISTGT_STATE_RUNNING); in istgt_lu_reload_update()
2359 ISTGT_NOTICELOG("add LU%d: Name=%s\n", lu->num, lu->name); in istgt_lu_reload_update()
2364 "skip LU%d: Name=%s\n", lu->num, lu->name); in istgt_lu_reload_update()
2367 lu = istgt->logical_unit[sp->num]; in istgt_lu_reload_update()
2368 if (lu == NULL) { in istgt_lu_reload_update()
2373 MTX_LOCK(&lu->mutex); in istgt_lu_reload_update()
2374 if (lu->maxtsih > 1) { in istgt_lu_reload_update()
2377 lu->num, lu->name, lu->maxtsih - 1); in istgt_lu_reload_update()
2382 MTX_UNLOCK(&lu->mutex); in istgt_lu_reload_update()
2387 MTX_UNLOCK(&lu->mutex); in istgt_lu_reload_update()
2395 istgt->logical_unit[sp->num] = lu; in istgt_lu_reload_update()
2400 lu_old = lu; in istgt_lu_reload_update()
2402 lu = istgt->logical_unit[sp->num]; in istgt_lu_reload_update()
2410 "failed\n", lu->num); in istgt_lu_reload_update()
2414 istgt->logical_unit[sp->num] = lu; in istgt_lu_reload_update()
2418 lu = istgt->logical_unit[sp->num]; in istgt_lu_reload_update()
2419 if (lu == NULL) { in istgt_lu_reload_update()
2425 rc = istgt_lu_init_unit(istgt, lu); in istgt_lu_reload_update()
2432 istgt_lu_set_state(lu, in istgt_lu_reload_update()
2435 rc = istgt_lu_create_thread(istgt, lu); in istgt_lu_reload_update()
2442 istgt_lu_set_state(lu, ISTGT_STATE_RUNNING); in istgt_lu_reload_update()
2444 lu->num, lu->name); in istgt_lu_reload_update()
2459 ISTGT_LU_Ptr lu; in istgt_lu_set_all_state() local
2463 lu = istgt->logical_unit[i]; in istgt_lu_set_all_state()
2464 if (lu == NULL) in istgt_lu_set_all_state()
2467 istgt_lu_set_state(lu, state); in istgt_lu_set_all_state()
2474 istgt_lu_create_thread(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu) in istgt_lu_create_thread() argument
2481 if (lu->queue_depth != 0) { in istgt_lu_create_thread()
2482 ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "thread for LU%d\n", lu->num); in istgt_lu_create_thread()
2485 rc = pthread_create(&lu->thread, &istgt->attr, &luworker, (void *)lu); in istgt_lu_create_thread()
2487 rc = pthread_create(&lu->thread, NULL, &luworker, (void *)lu); in istgt_lu_create_thread()
2494 rc = pthread_detach(lu->thread); in istgt_lu_create_thread()
2501 snprintf(buf, sizeof buf, "luthread #%d", lu->num); in istgt_lu_create_thread()
2502 pthread_set_name_np(lu->thread, buf); in istgt_lu_create_thread()
2512 ISTGT_LU_Ptr lu; in istgt_lu_create_threads() local
2519 lu = istgt->logical_unit[i]; in istgt_lu_create_threads()
2520 if (lu == NULL) in istgt_lu_create_threads()
2522 rc = istgt_lu_create_thread(istgt, lu); in istgt_lu_create_threads()
2533 istgt_lu_shutdown_unit(ISTGT_Ptr istgt, ISTGT_LU_Ptr lu) in istgt_lu_shutdown_unit() argument
2537 switch (lu->type) { in istgt_lu_shutdown_unit()
2539 rc = istgt_lu_pass_shutdown(istgt, lu); in istgt_lu_shutdown_unit()
2541 ISTGT_ERRLOG("LU%d: lu_pass_shutdown() failed\n", lu->num); in istgt_lu_shutdown_unit()
2547 rc = istgt_lu_disk_shutdown(istgt, lu); in istgt_lu_shutdown_unit()
2549 ISTGT_ERRLOG("LU%d: lu_disk_shutdown() failed\n", lu->num); in istgt_lu_shutdown_unit()
2555 rc = istgt_lu_dvd_shutdown(istgt, lu); in istgt_lu_shutdown_unit()
2557 ISTGT_ERRLOG("LU%d: lu_dvd_shutdown() failed\n", lu->num); in istgt_lu_shutdown_unit()
2563 rc = istgt_lu_tape_shutdown(istgt, lu); in istgt_lu_shutdown_unit()
2565 ISTGT_ERRLOG("LU%d: lu_tape_shutdown() failed\n", lu->num); in istgt_lu_shutdown_unit()
2574 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_shutdown_unit()
2578 rc = istgt_lu_del_unit(istgt, lu); in istgt_lu_shutdown_unit()
2580 ISTGT_ERRLOG("LU%d: lu_del_unit() failed\n", lu->num); in istgt_lu_shutdown_unit()
2584 if (lu->queue_depth != 0) { in istgt_lu_shutdown_unit()
2585 rc = pthread_cond_broadcast(&lu->queue_cond); in istgt_lu_shutdown_unit()
2587 ISTGT_ERRLOG("LU%d: cond_broadcast() failed\n", lu->num); in istgt_lu_shutdown_unit()
2589 rc = pthread_join(lu->thread, NULL); in istgt_lu_shutdown_unit()
2591 ISTGT_ERRLOG("LU%d: pthread_join() failed\n", lu->num); in istgt_lu_shutdown_unit()
2594 rc = pthread_cond_destroy(&lu->queue_cond); in istgt_lu_shutdown_unit()
2596 ISTGT_ERRLOG("LU%d: cond_destroy() failed\n", lu->num); in istgt_lu_shutdown_unit()
2599 rc = pthread_mutex_destroy(&lu->queue_mutex); in istgt_lu_shutdown_unit()
2601 ISTGT_ERRLOG("LU%d: mutex_destroy() failed\n", lu->num); in istgt_lu_shutdown_unit()
2604 rc = pthread_mutex_destroy(&lu->state_mutex); in istgt_lu_shutdown_unit()
2606 ISTGT_ERRLOG("LU%d: mutex_destroy() failed\n", lu->num); in istgt_lu_shutdown_unit()
2609 rc = pthread_mutex_destroy(&lu->mutex); in istgt_lu_shutdown_unit()
2611 ISTGT_ERRLOG("LU%d: mutex_destroy() failed\n", lu->num); in istgt_lu_shutdown_unit()
2621 ISTGT_LU_Ptr lu; in istgt_lu_shutdown() local
2628 lu = istgt->logical_unit[i]; in istgt_lu_shutdown()
2629 if (lu == NULL) in istgt_lu_shutdown()
2631 istgt_lu_set_state(lu, ISTGT_STATE_SHUTDOWN); in istgt_lu_shutdown()
2632 rc = istgt_lu_shutdown_unit(istgt, lu); in istgt_lu_shutdown()
2634 ISTGT_ERRLOG("LU%d: lu_shutdown_unit() failed\n", lu->num); in istgt_lu_shutdown()
2637 xfree(lu); in istgt_lu_shutdown()
2691 istgt_lu_reset(ISTGT_LU_Ptr lu, uint64_t lun) in istgt_lu_reset() argument
2696 if (lu == NULL) in istgt_lu_reset()
2702 lu->num, lu->name, lun_i); in istgt_lu_reset()
2704 switch (lu->type) { in istgt_lu_reset()
2706 MTX_LOCK(&lu->mutex); in istgt_lu_reset()
2707 rc = istgt_lu_pass_reset(lu, lun_i); in istgt_lu_reset()
2708 MTX_UNLOCK(&lu->mutex); in istgt_lu_reset()
2710 ISTGT_ERRLOG("LU%d: lu_pass_reset() failed\n", lu->num); in istgt_lu_reset()
2716 MTX_LOCK(&lu->mutex); in istgt_lu_reset()
2717 rc = istgt_lu_disk_reset(lu, lun_i); in istgt_lu_reset()
2718 MTX_UNLOCK(&lu->mutex); in istgt_lu_reset()
2720 ISTGT_ERRLOG("LU%d: lu_disk_reset() failed\n", lu->num); in istgt_lu_reset()
2726 MTX_LOCK(&lu->mutex); in istgt_lu_reset()
2727 rc = istgt_lu_dvd_reset(lu, lun_i); in istgt_lu_reset()
2728 MTX_UNLOCK(&lu->mutex); in istgt_lu_reset()
2730 ISTGT_ERRLOG("LU%d: lu_dvd_reset() failed\n", lu->num); in istgt_lu_reset()
2736 MTX_LOCK(&lu->mutex); in istgt_lu_reset()
2737 rc = istgt_lu_tape_reset(lu, lun_i); in istgt_lu_reset()
2738 MTX_UNLOCK(&lu->mutex); in istgt_lu_reset()
2740 ISTGT_ERRLOG("LU%d: lu_tape_reset() failed\n", lu->num); in istgt_lu_reset()
2749 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_reset()
2759 ISTGT_LU_Ptr lu; in istgt_lu_execute() local
2764 lu = lu_cmd->lu; in istgt_lu_execute()
2765 if (lu == NULL) in istgt_lu_execute()
2770 lu->num, conn->portal.tag, lu->name, lu_cmd->lun); in istgt_lu_execute()
2772 if (lu->online == 0) { in istgt_lu_execute()
2773 ISTGT_TRACELOG(ISTGT_TRACE_SCSI, "LU%d: offline\n", lu->num); in istgt_lu_execute()
2784 switch (lu->type) { in istgt_lu_execute()
2786 MTX_LOCK(&lu->mutex); in istgt_lu_execute()
2788 MTX_UNLOCK(&lu->mutex); in istgt_lu_execute()
2791 lu->num); in istgt_lu_execute()
2797 if (lu->queue_depth != 0) { in istgt_lu_execute()
2801 lu->num); in istgt_lu_execute()
2805 MTX_LOCK(&lu->mutex); in istgt_lu_execute()
2807 MTX_UNLOCK(&lu->mutex); in istgt_lu_execute()
2810 lu->num); in istgt_lu_execute()
2817 MTX_LOCK(&lu->mutex); in istgt_lu_execute()
2819 MTX_UNLOCK(&lu->mutex); in istgt_lu_execute()
2822 lu->num); in istgt_lu_execute()
2828 MTX_LOCK(&lu->mutex); in istgt_lu_execute()
2830 MTX_UNLOCK(&lu->mutex); in istgt_lu_execute()
2833 lu->num); in istgt_lu_execute()
2842 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_execute()
2928 lu_task->lu_cmd.lu = lu_cmd->lu; in istgt_lu_create_task()
3030 istgt_lu_clear_task_IT(CONN_Ptr conn, ISTGT_LU_Ptr lu) in istgt_lu_clear_task_IT() argument
3034 if (lu == NULL) in istgt_lu_clear_task_IT()
3037 if (lu->queue_depth == 0) in istgt_lu_clear_task_IT()
3041 switch (lu->type) { in istgt_lu_clear_task_IT()
3043 MTX_LOCK(&lu->mutex); in istgt_lu_clear_task_IT()
3044 rc = istgt_lu_disk_queue_clear_IT(conn, lu); in istgt_lu_clear_task_IT()
3045 MTX_UNLOCK(&lu->mutex); in istgt_lu_clear_task_IT()
3047 ISTGT_ERRLOG("LU%d: lu_disk_queue_clear_IT() failed\n", lu->num); in istgt_lu_clear_task_IT()
3056 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_clear_task_IT()
3064 istgt_lu_clear_task_ITL(CONN_Ptr conn, ISTGT_LU_Ptr lu, uint64_t lun) in istgt_lu_clear_task_ITL() argument
3069 if (lu == NULL) in istgt_lu_clear_task_ITL()
3072 if (lu->queue_depth == 0) in istgt_lu_clear_task_ITL()
3078 switch (lu->type) { in istgt_lu_clear_task_ITL()
3080 MTX_LOCK(&lu->mutex); in istgt_lu_clear_task_ITL()
3081 rc = istgt_lu_disk_queue_clear_ITL(conn, lu, lun_i); in istgt_lu_clear_task_ITL()
3082 MTX_UNLOCK(&lu->mutex); in istgt_lu_clear_task_ITL()
3084 ISTGT_ERRLOG("LU%d: lu_disk_queue_clear_ITL() failed\n", lu->num); in istgt_lu_clear_task_ITL()
3093 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_clear_task_ITL()
3101 istgt_lu_clear_task_ITLQ(CONN_Ptr conn, ISTGT_LU_Ptr lu, uint64_t lun, uint32_t CmdSN) in istgt_lu_clear_task_ITLQ() argument
3106 if (lu == NULL) in istgt_lu_clear_task_ITLQ()
3109 if (lu->queue_depth == 0) in istgt_lu_clear_task_ITLQ()
3115 switch (lu->type) { in istgt_lu_clear_task_ITLQ()
3117 MTX_LOCK(&lu->mutex); in istgt_lu_clear_task_ITLQ()
3118 rc = istgt_lu_disk_queue_clear_ITLQ(conn, lu, lun_i, CmdSN); in istgt_lu_clear_task_ITLQ()
3119 MTX_UNLOCK(&lu->mutex); in istgt_lu_clear_task_ITLQ()
3121 ISTGT_ERRLOG("LU%d: lu_disk_queue_clear_ITLQ() failed\n", lu->num); in istgt_lu_clear_task_ITLQ()
3130 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_clear_task_ITLQ()
3138 istgt_lu_clear_all_task(ISTGT_LU_Ptr lu, uint64_t lun) in istgt_lu_clear_all_task() argument
3142 if (lu == NULL) in istgt_lu_clear_all_task()
3145 if (lu->queue_depth == 0) in istgt_lu_clear_all_task()
3149 switch (lu->type) { in istgt_lu_clear_all_task()
3151 MTX_LOCK(&lu->mutex); in istgt_lu_clear_all_task()
3152 rc = istgt_lu_disk_queue_clear_all(lu, lun); in istgt_lu_clear_all_task()
3153 MTX_UNLOCK(&lu->mutex); in istgt_lu_clear_all_task()
3155 ISTGT_ERRLOG("LU%d: lu_disk_queue_clear_all() failed\n", lu->num); in istgt_lu_clear_all_task()
3164 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in istgt_lu_clear_all_task()
3174 ISTGT_LU_Ptr lu = (ISTGT_LU_Ptr) arg; in luworker() local
3190 while (istgt_get_state(lu->istgt) != ISTGT_STATE_RUNNING) { in luworker()
3191 if (istgt_get_state(lu->istgt) == ISTGT_STATE_EXITING in luworker()
3192 || istgt_get_state(lu->istgt) == ISTGT_STATE_SHUTDOWN) { in luworker()
3201 ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "LU%d loop start\n", lu->num); in luworker()
3208 switch (lu->type) { in luworker()
3211 if (istgt_lu_get_state(lu) != ISTGT_STATE_RUNNING) { in luworker()
3214 qcnt = istgt_lu_disk_queue_count(lu, &lun); in luworker()
3216 MTX_LOCK(&lu->queue_mutex); in luworker()
3217 if (lu->queue_check != 0) { in luworker()
3218 lu->queue_check = 0; in luworker()
3219 MTX_UNLOCK(&lu->queue_mutex); in luworker()
3226 rc = pthread_cond_timedwait(&lu->queue_cond, in luworker()
3227 &lu->queue_mutex, &abstime); in luworker()
3232 pthread_cond_wait(&lu->queue_cond, in luworker()
3233 &lu->queue_mutex); in luworker()
3235 lu->queue_check = 0; in luworker()
3236 MTX_UNLOCK(&lu->queue_mutex); in luworker()
3237 qcnt = istgt_lu_disk_queue_count(lu, &lun); in luworker()
3246 lu->num); in luworker()
3249 rc = istgt_lu_disk_queue_start(lu, lun); in luworker()
3252 rc = istgt_lu_disk_queue_start(lu, lun); in luworker()
3257 lu->num); in luworker()
3262 lu->num); in luworker()
3271 ISTGT_ERRLOG("LU%d: unsupported type\n", lu->num); in luworker()
3278 if (istgt_lu_get_state(lu) != ISTGT_STATE_RUNNING) { in luworker()
3285 ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "LU%d loop ended\n", lu->num); in luworker()