Lines Matching defs:cbe_lun

109 	struct ctl_be_lun	cbe_lun;	/* Must be first element. */
149 static uint64_t ctl_backend_ramdisk_lun_attr(struct ctl_be_lun *cbe_lun, const char *attrname);
158 static void ctl_backend_ramdisk_lun_shutdown(struct ctl_be_lun *cbe_lun);
204 ctl_remove_lun(&lun->cbe_lun);
368 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
369 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
375 lbas = io->scsiio.kern_data_len / cbe_lun->blocksize;
380 lba >> cbe_lun->pblockexp, GP_READ);
381 lbaoff = lba & ~(UINT_MAX << cbe_lun->pblockexp);
382 page += lbaoff * cbe_lun->blocksize;
384 cbe_lun->blocksize);
386 if (res < cbe_lun->blocksize)
439 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
443 lbas = MIN(lbas, 131072 / cbe_lun->blocksize);
444 len = lbas * cbe_lun->blocksize;
458 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
459 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
467 lbaoff = lba & ~(UINT_MAX << cbe_lun->pblockexp);
469 lbas = MIN(lbas, (SGPP << cbe_lun->pblockexp) - lbaoff);
470 sgs = (lbas + lbaoff + be_lun->pblockmul - 1) >> cbe_lun->pblockexp;
471 off = lbaoff * cbe_lun->blocksize;
477 len = lbas * cbe_lun->blocksize;
480 (lba >> cbe_lun->pblockexp) + i, op);
495 lba >> cbe_lun->pblockexp, op);
503 io->scsiio.kern_data_len = lbas * cbe_lun->blocksize;
510 if (cbe_lun->serseq >= CTL_LUN_SERSEQ_SOFT)
567 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
568 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
575 lbaoff = ARGS(io)->lba & ~(UINT_MAX << cbe_lun->pblockexp);
578 ARGS(io)->lba >> cbe_lun->pblockexp, GP_OTHER);
619 ctl_backend_ramdisk_delete(struct ctl_be_lun *cbe_lun, off_t lba, off_t len,
622 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
629 p = lba >> cbe_lun->pblockexp;
630 lbaoff = lba & ~(UINT_MAX << cbe_lun->pblockexp);
634 memset(page + lbaoff * cbe_lun->blocksize, 0,
636 cbe_lun->blocksize);
642 lp = (lba + len) >> cbe_lun->pblockexp;
643 lbaoff = (lba + len) & ~(UINT_MAX << cbe_lun->pblockexp);
647 memset(page, 0, lbaoff * cbe_lun->blocksize);
663 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
664 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
681 ctl_backend_ramdisk_delete(cbe_lun, lbalen->lba, lbalen->len,
690 lba >> cbe_lun->pblockexp, GP_WRITE);
696 lbaoff = lba & ~(UINT_MAX << cbe_lun->pblockexp);
697 page += lbaoff * cbe_lun->blocksize;
699 memset(page, 0, cbe_lun->blocksize);
702 cbe_lun->blocksize);
714 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
732 ctl_backend_ramdisk_delete(cbe_lun,
744 struct ctl_be_lun *cbe_lun = CTL_BACKEND_LUN(io);
765 ctl_lun_has_media(cbe_lun);
766 ctl_start_lun(cbe_lun);
768 ctl_stop_lun(cbe_lun);
770 ctl_lun_ejected(cbe_lun);
798 ctl_backend_ramdisk_lun_attr(struct ctl_be_lun *cbe_lun, const char *attrname)
800 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
808 val = be_lun->cap_used / be_lun->cbe_lun.blocksize;
811 be_lun->cbe_lun.blocksize;
867 if (be_lun->cbe_lun.lun_id == params->lun_id) {
895 retval = ctl_remove_lun(&be_lun->cbe_lun);
934 struct ctl_be_lun *cbe_lun;
945 cbe_lun = &be_lun->cbe_lun;
946 cbe_lun->options = nvlist_clone(req->args_nvl);
951 cbe_lun->lun_type = params->device_type;
953 cbe_lun->lun_type = T_DIRECT;
955 cbe_lun->flags = 0;
956 value = dnvlist_get_string(cbe_lun->options, "ha_role", NULL);
959 cbe_lun->flags |= CTL_LUN_FLAG_PRIMARY;
961 cbe_lun->flags |= CTL_LUN_FLAG_PRIMARY;
964 value = dnvlist_get_string(cbe_lun->options, "pblocksize", NULL);
976 if (cbe_lun->lun_type == T_DIRECT ||
977 cbe_lun->lun_type == T_CDROM) {
979 cbe_lun->blocksize = params->blocksize_bytes;
980 else if (cbe_lun->lun_type == T_CDROM)
981 cbe_lun->blocksize = 2048;
983 cbe_lun->blocksize = 512;
984 be_lun->pblockmul = be_lun->pblocksize / cbe_lun->blocksize;
989 be_lun->pblocksize, cbe_lun->blocksize);
992 if (params->lun_size_bytes < cbe_lun->blocksize) {
995 params->lun_size_bytes, cbe_lun->blocksize);
998 be_lun->size_blocks = params->lun_size_bytes / cbe_lun->blocksize;
999 be_lun->size_bytes = be_lun->size_blocks * cbe_lun->blocksize;
1006 cbe_lun->maxlba = be_lun->size_blocks - 1;
1007 cbe_lun->pblockexp = fls(be_lun->pblockmul) - 1;
1008 cbe_lun->pblockoff = 0;
1009 cbe_lun->ublockexp = cbe_lun->pblockexp;
1010 cbe_lun->ublockoff = 0;
1011 cbe_lun->atomicblock = be_lun->pblocksize;
1012 cbe_lun->opttxferlen = SGPP * be_lun->pblocksize;
1013 value = dnvlist_get_string(cbe_lun->options, "capacity", NULL);
1018 cbe_lun->pblockexp = 0;
1022 params->blocksize_bytes = cbe_lun->blocksize;
1025 value = dnvlist_get_string(cbe_lun->options, "unmap", NULL);
1027 cbe_lun->flags |= CTL_LUN_FLAG_UNMAP;
1028 value = dnvlist_get_string(cbe_lun->options, "readonly", NULL);
1031 cbe_lun->flags |= CTL_LUN_FLAG_READONLY;
1032 } else if (cbe_lun->lun_type != T_DIRECT)
1033 cbe_lun->flags |= CTL_LUN_FLAG_READONLY;
1034 cbe_lun->serseq = CTL_LUN_SERSEQ_OFF;
1035 value = dnvlist_get_string(cbe_lun->options, "serseq", NULL);
1037 cbe_lun->serseq = CTL_LUN_SERSEQ_ON;
1039 cbe_lun->serseq = CTL_LUN_SERSEQ_READ;
1041 cbe_lun->serseq = CTL_LUN_SERSEQ_SOFT;
1043 cbe_lun->serseq = CTL_LUN_SERSEQ_OFF;
1046 cbe_lun->req_lun_id = params->req_lun_id;
1047 cbe_lun->flags |= CTL_LUN_FLAG_ID_REQ;
1049 cbe_lun->req_lun_id = 0;
1051 cbe_lun->lun_shutdown = ctl_backend_ramdisk_lun_shutdown;
1052 cbe_lun->be = &ctl_be_ramdisk_driver;
1056 strncpy((char *)cbe_lun->serial_num, tmpstr,
1057 MIN(sizeof(cbe_lun->serial_num), sizeof(tmpstr)));
1063 strncpy((char *)cbe_lun->serial_num, params->serial_num,
1064 MIN(sizeof(cbe_lun->serial_num),
1069 strncpy((char *)cbe_lun->device_id, tmpstr,
1070 MIN(sizeof(cbe_lun->device_id), sizeof(tmpstr)));
1076 strncpy((char *)cbe_lun->device_id, params->device_id,
1077 MIN(sizeof(cbe_lun->device_id),
1109 retval = ctl_add_lun(&be_lun->cbe_lun);
1123 params->req_lun_id = cbe_lun->lun_id;
1133 nvlist_destroy(cbe_lun->options);
1148 struct ctl_be_lun *cbe_lun;
1158 if (be_lun->cbe_lun.lun_id == params->lun_id)
1168 cbe_lun = &be_lun->cbe_lun;
1174 nvlist_destroy(cbe_lun->options);
1175 cbe_lun->options = nvlist_clone(req->args_nvl);
1178 wasprim = (cbe_lun->flags & CTL_LUN_FLAG_PRIMARY);
1179 value = dnvlist_get_string(cbe_lun->options, "ha_role", NULL);
1182 cbe_lun->flags |= CTL_LUN_FLAG_PRIMARY;
1184 cbe_lun->flags &= ~CTL_LUN_FLAG_PRIMARY;
1186 cbe_lun->flags |= CTL_LUN_FLAG_PRIMARY;
1188 cbe_lun->flags &= ~CTL_LUN_FLAG_PRIMARY;
1189 if (wasprim != (cbe_lun->flags & CTL_LUN_FLAG_PRIMARY)) {
1190 if (cbe_lun->flags & CTL_LUN_FLAG_PRIMARY)
1191 ctl_lun_primary(cbe_lun);
1193 ctl_lun_secondary(cbe_lun);
1196 blocksize = be_lun->cbe_lun.blocksize;
1205 be_lun->cbe_lun.maxlba = be_lun->size_blocks - 1;
1206 ctl_lun_capacity_changed(&be_lun->cbe_lun);
1222 ctl_backend_ramdisk_lun_shutdown(struct ctl_be_lun *cbe_lun)
1224 struct ctl_be_ramdisk_lun *be_lun = (struct ctl_be_ramdisk_lun *)cbe_lun;
1229 nvlist_destroy(be_lun->cbe_lun.options);