Lines Matching defs:be_lun

119 static void ctl_backend_ramdisk_lun_shutdown(void *be_lun);
120 static void ctl_backend_ramdisk_lun_config_status(void *be_lun,
223 struct ctl_be_ramdisk_lun *be_lun;
231 be_lun = (struct ctl_be_ramdisk_lun *)ctl_be_lun->be_lun;
246 mtx_lock(&be_lun->queue_lock);
247 STAILQ_INSERT_TAIL(&be_lun->cont_queue,
249 mtx_unlock(&be_lun->queue_lock);
250 taskqueue_enqueue(be_lun->io_taskqueue,
251 &be_lun->io_task);
347 struct ctl_be_ramdisk_lun *be_lun;
350 be_lun = (struct ctl_be_ramdisk_lun *)context;
351 softc = be_lun->softc;
353 mtx_lock(&be_lun->queue_lock);
355 io = (union ctl_io *)STAILQ_FIRST(&be_lun->cont_queue);
357 STAILQ_REMOVE(&be_lun->cont_queue, &io->io_hdr,
360 mtx_unlock(&be_lun->queue_lock);
364 mtx_lock(&be_lun->queue_lock);
374 mtx_unlock(&be_lun->queue_lock);
425 struct ctl_be_ramdisk_lun *be_lun;
433 be_lun = NULL;
437 STAILQ_FOREACH(be_lun, &softc->lun_list, links) {
438 if (be_lun->ctl_be_lun.lun_id == params->lun_id)
443 if (be_lun == NULL) {
450 retval = ctl_disable_lun(&be_lun->ctl_be_lun);
468 be_lun->flags |= CTL_BE_RAMDISK_LUN_WAITING;
471 retval = ctl_invalidate_lun(&be_lun->ctl_be_lun);
477 be_lun->flags &= ~CTL_BE_RAMDISK_LUN_WAITING;
484 while ((be_lun->flags & CTL_BE_RAMDISK_LUN_UNCONFIGURED) == 0) {
485 retval = msleep(be_lun, &softc->lock, PCATCH, "ctlram", 0);
489 be_lun->flags &= ~CTL_BE_RAMDISK_LUN_WAITING;
498 STAILQ_REMOVE(&softc->lun_list, be_lun, ctl_be_ramdisk_lun,
506 taskqueue_drain(be_lun->io_taskqueue, &be_lun->io_task);
507 taskqueue_free(be_lun->io_taskqueue);
508 ctl_free_opts(&be_lun->ctl_be_lun.options);
509 mtx_destroy(&be_lun->queue_lock);
510 free(be_lun, M_RAMDISK);
527 struct ctl_be_ramdisk_lun *be_lun;
541 be_lun = malloc(sizeof(*be_lun), M_RAMDISK, M_ZERO | (do_wait ?
544 if (be_lun == NULL) {
547 sizeof(*be_lun));
550 sprintf(be_lun->lunname, "cram%d", softc->num_luns);
551 ctl_init_opts(&be_lun->ctl_be_lun.options,
555 be_lun->ctl_be_lun.lun_type = params->device_type;
557 be_lun->ctl_be_lun.lun_type = T_DIRECT;
559 if (be_lun->ctl_be_lun.lun_type == T_DIRECT) {
568 be_lun->size_blocks = params->lun_size_bytes / blocksize;
569 be_lun->size_bytes = be_lun->size_blocks * blocksize;
571 be_lun->ctl_be_lun.maxlba = be_lun->size_blocks - 1;
572 be_lun->ctl_be_lun.atomicblock = UINT32_MAX;
573 be_lun->ctl_be_lun.opttxferlen = softc->rd_size / blocksize;
575 be_lun->ctl_be_lun.maxlba = 0;
577 be_lun->size_bytes = 0;
578 be_lun->size_blocks = 0;
581 be_lun->ctl_be_lun.blocksize = blocksize;
587 params->lun_size_bytes = be_lun->size_bytes;
589 be_lun->softc = softc;
592 value = ctl_get_opt(&be_lun->ctl_be_lun.options, "unmap");
596 be_lun->flags = CTL_BE_RAMDISK_LUN_UNCONFIGURED;
597 be_lun->ctl_be_lun.flags = CTL_LUN_FLAG_PRIMARY;
599 be_lun->ctl_be_lun.flags |= CTL_LUN_FLAG_UNMAP;
600 be_lun->ctl_be_lun.be_lun = be_lun;
603 be_lun->ctl_be_lun.req_lun_id = params->req_lun_id;
604 be_lun->ctl_be_lun.flags |= CTL_LUN_FLAG_ID_REQ;
606 be_lun->ctl_be_lun.req_lun_id = 0;
608 be_lun->ctl_be_lun.lun_shutdown = ctl_backend_ramdisk_lun_shutdown;
609 be_lun->ctl_be_lun.lun_config_status =
611 be_lun->ctl_be_lun.be = &ctl_be_ramdisk_driver;
615 strncpy((char *)be_lun->ctl_be_lun.serial_num, tmpstr,
616 MIN(sizeof(be_lun->ctl_be_lun.serial_num),
623 strncpy((char *)be_lun->ctl_be_lun.serial_num,
625 MIN(sizeof(be_lun->ctl_be_lun.serial_num),
630 strncpy((char *)be_lun->ctl_be_lun.device_id, tmpstr,
631 MIN(sizeof(be_lun->ctl_be_lun.device_id),
638 strncpy((char *)be_lun->ctl_be_lun.device_id,
640 MIN(sizeof(be_lun->ctl_be_lun.device_id),
644 STAILQ_INIT(&be_lun->cont_queue);
645 mtx_init(&be_lun->queue_lock, "cram queue lock", NULL, MTX_DEF);
646 TASK_INIT(&be_lun->io_task, /*priority*/0, ctl_backend_ramdisk_worker,
647 be_lun);
649 be_lun->io_taskqueue = taskqueue_create(be_lun->lunname, M_WAITOK,
650 taskqueue_thread_enqueue, /*context*/&be_lun->io_taskqueue);
651 if (be_lun->io_taskqueue == NULL) {
657 retval = taskqueue_start_threads(&be_lun->io_taskqueue,
661 "%s taskq", be_lun->lunname);
667 STAILQ_INSERT_TAIL(&softc->lun_list, be_lun, links);
671 retval = ctl_add_lun(&be_lun->ctl_be_lun);
674 STAILQ_REMOVE(&softc->lun_list, be_lun, ctl_be_ramdisk_lun,
694 be_lun->flags |= CTL_BE_RAMDISK_LUN_WAITING;
696 while (be_lun->flags & CTL_BE_RAMDISK_LUN_UNCONFIGURED) {
697 retval = msleep(be_lun, &softc->lock, PCATCH, "ctlram", 0);
701 be_lun->flags &= ~CTL_BE_RAMDISK_LUN_WAITING;
703 if (be_lun->flags & CTL_BE_RAMDISK_LUN_CONFIG_ERR) {
707 STAILQ_REMOVE(&softc->lun_list, be_lun, ctl_be_ramdisk_lun,
713 params->req_lun_id = be_lun->ctl_be_lun.lun_id;
723 if (be_lun != NULL) {
724 if (be_lun->io_taskqueue != NULL) {
725 taskqueue_free(be_lun->io_taskqueue);
727 ctl_free_opts(&be_lun->ctl_be_lun.options);
728 mtx_destroy(&be_lun->queue_lock);
729 free(be_lun, M_RAMDISK);
739 struct ctl_be_ramdisk_lun *be_lun;
745 be_lun = NULL;
748 STAILQ_FOREACH(be_lun, &softc->lun_list, links) {
749 if (be_lun->ctl_be_lun.lun_id == params->lun_id)
754 if (be_lun == NULL) {
768 blocksize = be_lun->ctl_be_lun.blocksize;
777 be_lun->size_blocks = params->lun_size_bytes / blocksize;
778 be_lun->size_bytes = be_lun->size_blocks * blocksize;
786 be_lun->ctl_be_lun.maxlba = be_lun->size_blocks - 1;
787 ctl_lun_capacity_changed(&be_lun->ctl_be_lun);
790 params->lun_size_bytes = be_lun->size_bytes;
803 ctl_backend_ramdisk_lun_shutdown(void *be_lun)
809 lun = (struct ctl_be_ramdisk_lun *)be_lun;
829 free(be_lun, M_RAMDISK);
833 ctl_backend_ramdisk_lun_config_status(void *be_lun,
839 lun = (struct ctl_be_ramdisk_lun *)be_lun;
916 struct ctl_be_ramdisk_lun *be_lun;
922 be_lun = (struct ctl_be_ramdisk_lun *)ctl_be_lun->be_lun;