Lines Matching refs:sl

56 extern sbd_status_t sbd_pgr_meta_init(sbd_lu_t *sl);
57 extern sbd_status_t sbd_pgr_meta_load(sbd_lu_t *sl);
58 extern void sbd_pgr_reset(sbd_lu_t *sl);
85 int sbd_import_active_lu(sbd_import_lu_t *ilu, sbd_lu_t *sl, uint32_t *err_ret);
97 sbd_status_t sbd_create_zfs_meta_object(sbd_lu_t *sl);
98 sbd_status_t sbd_open_zfs_meta(sbd_lu_t *sl);
99 sbd_status_t sbd_read_zfs_meta(sbd_lu_t *sl, uint8_t *buf, uint64_t sz,
101 sbd_status_t sbd_write_zfs_meta(sbd_lu_t *sl, uint8_t *buf, uint64_t sz,
103 sbd_status_t sbd_update_zfs_prop(sbd_lu_t *sl);
108 void sbd_close_lu(sbd_lu_t *sl);
577 sbd_link_lu(sbd_lu_t *sl) in sbd_link_lu() argument
582 mutex_enter(&sl->sl_lock); in sbd_link_lu()
583 ASSERT(sl->sl_trans_op != SL_OP_NONE); in sbd_link_lu()
585 if (sl->sl_flags & SL_LINKED) { in sbd_link_lu()
587 mutex_exit(&sl->sl_lock); in sbd_link_lu()
591 if (strcmp(nsl->sl_name, sl->sl_name) == 0) in sbd_link_lu()
596 mutex_exit(&sl->sl_lock); in sbd_link_lu()
599 sl->sl_next = sbd_lu_list; in sbd_link_lu()
600 sbd_lu_list = sl; in sbd_link_lu()
601 sl->sl_flags |= SL_LINKED; in sbd_link_lu()
603 mutex_exit(&sl->sl_lock); in sbd_link_lu()
608 sbd_unlink_lu(sbd_lu_t *sl) in sbd_unlink_lu() argument
613 mutex_enter(&sl->sl_lock); in sbd_unlink_lu()
614 ASSERT(sl->sl_trans_op != SL_OP_NONE); in sbd_unlink_lu()
616 ASSERT(sl->sl_flags & SL_LINKED); in sbd_unlink_lu()
618 if (*ppnsl == sl) in sbd_unlink_lu()
623 sl->sl_flags &= ~SL_LINKED; in sbd_unlink_lu()
625 mutex_exit(&sl->sl_lock); in sbd_unlink_lu()
632 sbd_lu_t *sl; in sbd_find_and_lock_lu() local
637 for (sl = sbd_lu_list; sl; sl = sl->sl_next) { in sbd_find_and_lock_lu()
639 found = bcmp(sl->sl_device_id + 4, guid, 16) == 0; in sbd_find_and_lock_lu()
641 found = strcmp(sl->sl_name, (char *)meta_name) == 0; in sbd_find_and_lock_lu()
650 mutex_enter(&sl->sl_lock); in sbd_find_and_lock_lu()
651 if (sl->sl_trans_op == SL_OP_NONE) { in sbd_find_and_lock_lu()
652 sl->sl_trans_op = op; in sbd_find_and_lock_lu()
653 *ppsl = sl; in sbd_find_and_lock_lu()
658 mutex_exit(&sl->sl_lock); in sbd_find_and_lock_lu()
664 sbd_read_meta(sbd_lu_t *sl, uint64_t offset, uint64_t size, uint8_t *buf) in sbd_read_meta() argument
677 ASSERT(sl->sl_flags & SL_META_OPENED); in sbd_read_meta()
678 if (sl->sl_flags & SL_SHARED_META) { in sbd_read_meta()
679 meta_align = (((uint64_t)1) << sl->sl_data_blocksize_shift) - 1; in sbd_read_meta()
680 vp = sl->sl_data_vp; in sbd_read_meta()
683 meta_align = (((uint64_t)1) << sl->sl_meta_blocksize_shift) - 1; in sbd_read_meta()
684 if ((sl->sl_flags & SL_ZFS_META) == 0) { in sbd_read_meta()
685 vp = sl->sl_meta_vp; in sbd_read_meta()
692 if (ending_off > sl->sl_meta_size_used) { in sbd_read_meta()
694 if (starting_off >= sl->sl_meta_size_used) { in sbd_read_meta()
697 ending_off = (sl->sl_meta_size_used + meta_align) & in sbd_read_meta()
705 ASSERT((starting_off + io_size) <= sl->sl_total_meta_size); in sbd_read_meta()
714 rw_enter(&sl->sl_access_state_lock, RW_READER); in sbd_read_meta()
715 if ((sl->sl_flags & SL_MEDIA_LOADED) == 0 && in sbd_read_meta()
716 sl->sl_trans_op != SL_OP_IMPORT_LU) { in sbd_read_meta()
717 rw_exit(&sl->sl_access_state_lock); in sbd_read_meta()
721 if (sl->sl_flags & SL_ZFS_META) { in sbd_read_meta()
722 if ((ret = sbd_read_zfs_meta(sl, io_buf, io_size, in sbd_read_meta()
724 rw_exit(&sl->sl_access_state_lock); in sbd_read_meta()
734 rw_exit(&sl->sl_access_state_lock); in sbd_read_meta()
738 rw_exit(&sl->sl_access_state_lock); in sbd_read_meta()
749 sbd_write_meta(sbd_lu_t *sl, uint64_t offset, uint64_t size, uint8_t *buf) in sbd_write_meta() argument
762 ASSERT(sl->sl_flags & SL_META_OPENED); in sbd_write_meta()
763 if (sl->sl_flags & SL_SHARED_META) { in sbd_write_meta()
764 meta_align = (((uint64_t)1) << sl->sl_data_blocksize_shift) - 1; in sbd_write_meta()
765 vp = sl->sl_data_vp; in sbd_write_meta()
768 meta_align = (((uint64_t)1) << sl->sl_meta_blocksize_shift) - 1; in sbd_write_meta()
769 if ((sl->sl_flags & SL_ZFS_META) == 0) { in sbd_write_meta()
770 vp = sl->sl_meta_vp; in sbd_write_meta()
779 ret = sbd_read_meta(sl, starting_off, io_size, io_buf); in sbd_write_meta()
791 rw_enter(&sl->sl_access_state_lock, RW_READER); in sbd_write_meta()
792 if ((sl->sl_flags & SL_MEDIA_LOADED) == 0 && in sbd_write_meta()
793 sl->sl_trans_op != SL_OP_IMPORT_LU) { in sbd_write_meta()
794 rw_exit(&sl->sl_access_state_lock); in sbd_write_meta()
798 if (sl->sl_flags & SL_ZFS_META) { in sbd_write_meta()
799 if ((ret = sbd_write_zfs_meta(sl, io_buf, io_size, in sbd_write_meta()
801 rw_exit(&sl->sl_access_state_lock); in sbd_write_meta()
811 rw_exit(&sl->sl_access_state_lock); in sbd_write_meta()
815 rw_exit(&sl->sl_access_state_lock); in sbd_write_meta()
919 sbd_load_section_hdr(sbd_lu_t *sl, sm_section_hdr_t *sms) in sbd_load_section_hdr() argument
925 for (st = sl->sl_meta_offset + sizeof (sbd_meta_start_t); in sbd_load_section_hdr()
926 st < sl->sl_meta_size_used; st += h.sms_size) { in sbd_load_section_hdr()
927 if ((ret = sbd_read_meta(sl, st, sizeof (sm_section_hdr_t), in sbd_load_section_hdr()
936 ((st + h.sms_size) > sl->sl_meta_size_used)) { in sbd_load_section_hdr()
949 sbd_load_meta_start(sbd_lu_t *sl) in sbd_load_meta_start() argument
955 sl->sl_total_meta_size = (uint64_t)-1; in sbd_load_meta_start()
956 sl->sl_meta_size_used = sl->sl_meta_offset + sizeof (sbd_meta_start_t); in sbd_load_meta_start()
959 ret = sbd_read_meta(sl, sl->sl_meta_offset, sizeof (*sm), in sbd_load_meta_start()
980 sl->sl_total_meta_size = sm->sm_meta_size; in sbd_load_meta_start()
981 sl->sl_meta_size_used = sm->sm_meta_size_used; in sbd_load_meta_start()
990 sbd_write_meta_start(sbd_lu_t *sl, uint64_t meta_size, uint64_t meta_size_used) in sbd_write_meta_start() argument
1006 ret = sbd_write_meta(sl, sl->sl_meta_offset, sizeof (*sm), in sbd_write_meta_start()
1014 sbd_read_meta_section(sbd_lu_t *sl, sm_section_hdr_t **ppsms, uint16_t sms_id) in sbd_read_meta_section() argument
1020 mutex_enter(&sl->sl_metadata_lock); in sbd_read_meta_section()
1024 if ((ret = sbd_load_section_hdr(sl, &sms)) != SBD_SUCCESS) { in sbd_read_meta_section()
1025 mutex_exit(&sl->sl_metadata_lock); in sbd_read_meta_section()
1037 ret = sbd_read_meta(sl, (*ppsms)->sms_offset, (*ppsms)->sms_size, in sbd_read_meta_section()
1049 mutex_exit(&sl->sl_metadata_lock); in sbd_read_meta_section()
1057 sbd_load_section_hdr_unbuffered(sbd_lu_t *sl, sm_section_hdr_t *sms) in sbd_load_section_hdr_unbuffered() argument
1064 if (sl->sl_flags & SL_ZFS_META) { in sbd_load_section_hdr_unbuffered()
1065 if ((ret = sbd_open_zfs_meta(sl)) != SBD_SUCCESS) { in sbd_load_section_hdr_unbuffered()
1070 if ((ret = sbd_load_meta_start(sl)) != SBD_SUCCESS) { in sbd_load_section_hdr_unbuffered()
1073 return (sbd_load_section_hdr(sl, sms)); in sbd_load_section_hdr_unbuffered()
1077 sbd_write_meta_section(sbd_lu_t *sl, sm_section_hdr_t *sms) in sbd_write_meta_section() argument
1088 mutex_enter(&sl->sl_metadata_lock); in sbd_write_meta_section()
1097 ret = sbd_read_meta(sl, sms->sms_offset, sizeof (t), in sbd_write_meta_section()
1100 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1107 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1111 ret = sbd_write_meta(sl, sms->sms_offset, in sbd_write_meta_section()
1113 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1124 ret = sbd_write_meta(sl, t.sms_offset, sizeof (t), in sbd_write_meta_section()
1127 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1135 ret = sbd_load_section_hdr(sl, &t); in sbd_write_meta_section()
1142 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1160 for (off = sl->sl_meta_offset + sizeof (sbd_meta_start_t); in sbd_write_meta_section()
1161 off < sl->sl_meta_size_used; off += t.sms_size) { in sbd_write_meta_section()
1162 ret = sbd_read_meta(sl, off, sizeof (t), (uint8_t *)&t); in sbd_write_meta_section()
1164 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1170 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1192 off = (unused_start == 0) ? sl->sl_meta_size_used : unused_start; in sbd_write_meta_section()
1198 s = sl->sl_total_meta_size - off; in sbd_write_meta_section()
1199 if (s >= sms->sms_size || !(sl->sl_flags & SL_SHARED_META)) { in sbd_write_meta_section()
1208 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1236 uint64_t old_sz_used = sl->sl_meta_size_used; /* save a copy */ in sbd_write_meta_section()
1237 old_meta_size = sl->sl_total_meta_size; /* save a copy */ in sbd_write_meta_section()
1239 write_meta_ret = sbd_write_meta(sl, off, s, cb); in sbd_write_meta_section()
1241 sl->sl_meta_size_used = off + s; in sbd_write_meta_section()
1242 if (sl->sl_total_meta_size < sl->sl_meta_size_used) { in sbd_write_meta_section()
1245 sl->sl_meta_blocksize_shift) - 1; in sbd_write_meta_section()
1246 sl->sl_total_meta_size = in sbd_write_meta_section()
1247 (sl->sl_meta_size_used + meta_align) & in sbd_write_meta_section()
1250 ret = sbd_write_meta_start(sl, sl->sl_total_meta_size, in sbd_write_meta_section()
1251 sl->sl_meta_size_used); in sbd_write_meta_section()
1253 sl->sl_meta_size_used = old_sz_used; in sbd_write_meta_section()
1254 sl->sl_total_meta_size = old_meta_size; in sbd_write_meta_section()
1257 sl->sl_meta_size_used = old_sz_used; in sbd_write_meta_section()
1258 sl->sl_total_meta_size = old_meta_size; in sbd_write_meta_section()
1261 write_meta_ret = sbd_write_meta(sl, off, s, cb); in sbd_write_meta_section()
1278 if (sbd_load_section_hdr_unbuffered(sl, &new_sms) != in sbd_write_meta_section()
1283 if (sbd_read_meta(sl, sms_before_unused.sms_offset, in sbd_write_meta_section()
1312 (void) sbd_write_meta(sl, unused_sms->sms_offset, in sbd_write_meta_section()
1316 mutex_exit(&sl->sl_metadata_lock); in sbd_write_meta_section()
1325 sbd_write_lu_info(sbd_lu_t *sl) in sbd_write_lu_info() argument
1333 mutex_enter(&sl->sl_lock); in sbd_write_lu_info()
1335 s = sl->sl_serial_no_size; in sbd_write_lu_info()
1336 if ((sl->sl_flags & (SL_SHARED_META | SL_ZFS_META)) == 0) { in sbd_write_lu_info()
1337 if (sl->sl_data_filename) { in sbd_write_lu_info()
1338 s += strlen(sl->sl_data_filename) + 1; in sbd_write_lu_info()
1341 if (sl->sl_flags & SL_ZFS_META) { in sbd_write_lu_info()
1342 zvol_name = sbd_get_zvol_name(sl); in sbd_write_lu_info()
1345 if (sl->sl_alias) { in sbd_write_lu_info()
1346 s += strlen(sl->sl_alias) + 1; in sbd_write_lu_info()
1348 if (sl->sl_mgmt_url) { in sbd_write_lu_info()
1349 s += strlen(sl->sl_mgmt_url) + 1; in sbd_write_lu_info()
1353 if ((sl->sl_flags & (SL_SHARED_META | SL_ZFS_META)) == 0) { in sbd_write_lu_info()
1355 (void) strcpy((char *)p, sl->sl_data_filename); in sbd_write_lu_info()
1359 p += strlen(sl->sl_data_filename) + 1; in sbd_write_lu_info()
1361 if (sl->sl_flags & SL_ZFS_META) { in sbd_write_lu_info()
1370 if (sl->sl_alias) { in sbd_write_lu_info()
1371 (void) strcpy((char *)p, sl->sl_alias); in sbd_write_lu_info()
1375 p += strlen(sl->sl_alias) + 1; in sbd_write_lu_info()
1377 if (sl->sl_mgmt_url) { in sbd_write_lu_info()
1378 (void) strcpy((char *)p, sl->sl_mgmt_url); in sbd_write_lu_info()
1382 p += strlen(sl->sl_mgmt_url) + 1; in sbd_write_lu_info()
1384 if (sl->sl_flags & SL_WRITE_PROTECTED) { in sbd_write_lu_info()
1387 if (sl->sl_flags & SL_SAVED_WRITE_CACHE_DISABLE) { in sbd_write_lu_info()
1390 if (sl->sl_flags & SL_VID_VALID) { in sbd_write_lu_info()
1391 bcopy(sl->sl_vendor_id, sli->sli_vid, 8); in sbd_write_lu_info()
1394 if (sl->sl_flags & SL_PID_VALID) { in sbd_write_lu_info()
1395 bcopy(sl->sl_product_id, sli->sli_pid, 16); in sbd_write_lu_info()
1398 if (sl->sl_flags & SL_REV_VALID) { in sbd_write_lu_info()
1399 bcopy(sl->sl_revision, sli->sli_rev, 4); in sbd_write_lu_info()
1402 if (sl->sl_serial_no_size) { in sbd_write_lu_info()
1403 bcopy(sl->sl_serial_no, p, sl->sl_serial_no_size); in sbd_write_lu_info()
1404 sli->sli_serial_size = sl->sl_serial_no_size; in sbd_write_lu_info()
1410 sli->sli_lu_size = sl->sl_lu_size; in sbd_write_lu_info()
1411 sli->sli_data_blocksize_shift = sl->sl_data_blocksize_shift; in sbd_write_lu_info()
1413 bcopy(sl->sl_device_id, sli->sli_device_id, 20); in sbd_write_lu_info()
1419 mutex_exit(&sl->sl_lock); in sbd_write_lu_info()
1420 ret = sbd_write_meta_section(sl, (sm_section_hdr_t *)sli); in sbd_write_lu_info()
1429 do_unmap_setup(sbd_lu_t *sl) in do_unmap_setup() argument
1432 sl->sl_flags &= ~(SL_UNMAP_ENABLED); in do_unmap_setup()
1436 if ((sl->sl_flags & SL_ZFS_META) == 0) in do_unmap_setup()
1439 sl->sl_flags |= SL_UNMAP_ENABLED; in do_unmap_setup()
1443 sbd_populate_and_register_lu(sbd_lu_t *sl, uint32_t *err_ret) in sbd_populate_and_register_lu() argument
1445 stmf_lu_t *lu = sl->sl_lu; in sbd_populate_and_register_lu()
1448 do_unmap_setup(sl); in sbd_populate_and_register_lu()
1450 lu->lu_id = (scsi_devid_desc_t *)sl->sl_device_id; in sbd_populate_and_register_lu()
1451 if (sl->sl_alias) { in sbd_populate_and_register_lu()
1452 lu->lu_alias = sl->sl_alias; in sbd_populate_and_register_lu()
1454 lu->lu_alias = sl->sl_name; in sbd_populate_and_register_lu()
1456 if (sl->sl_access_state == SBD_LU_STANDBY) { in sbd_populate_and_register_lu()
1465 if (sl->sl_meta_filename) { in sbd_populate_and_register_lu()
1466 lu->lu_proxy_reg_arg = sl->sl_meta_filename; in sbd_populate_and_register_lu()
1467 lu->lu_proxy_reg_arg_len = strlen(sl->sl_meta_filename) + 1; in sbd_populate_and_register_lu()
1469 lu->lu_proxy_reg_arg = sl->sl_data_filename; in sbd_populate_and_register_lu()
1470 lu->lu_proxy_reg_arg_len = strlen(sl->sl_data_filename) + 1; in sbd_populate_and_register_lu()
1484 sl->sl_state = STMF_STATE_OFFLINE; in sbd_populate_and_register_lu()
1499 list_create(&sl->sl_ats_io_list, sizeof (ats_state_t), in sbd_populate_and_register_lu()
1506 sbd_open_data_file(sbd_lu_t *sl, uint32_t *err_ret, int lu_size_valid, in sbd_open_data_file() argument
1518 mutex_enter(&sl->sl_lock); in sbd_open_data_file()
1522 if (sl->sl_data_filename[0] != '/') { in sbd_open_data_file()
1524 mutex_exit(&sl->sl_lock); in sbd_open_data_file()
1527 if ((ret = lookupname(sl->sl_data_filename, UIO_SYSSPACE, FOLLOW, in sbd_open_data_file()
1528 NULLVPP, &sl->sl_data_vp)) != 0) { in sbd_open_data_file()
1530 mutex_exit(&sl->sl_lock); in sbd_open_data_file()
1533 sl->sl_data_vtype = vt = sl->sl_data_vp->v_type; in sbd_open_data_file()
1534 VN_RELE(sl->sl_data_vp); in sbd_open_data_file()
1537 mutex_exit(&sl->sl_lock); in sbd_open_data_file()
1540 if (sl->sl_flags & SL_WRITE_PROTECTED) { in sbd_open_data_file()
1545 if ((ret = vn_open(sl->sl_data_filename, UIO_SYSSPACE, flag, 0, in sbd_open_data_file()
1546 &sl->sl_data_vp, 0, 0)) != 0) { in sbd_open_data_file()
1548 mutex_exit(&sl->sl_lock); in sbd_open_data_file()
1553 if ((ret = VOP_GETATTR(sl->sl_data_vp, &vattr, 0, CRED(), NULL)) != 0) { in sbd_open_data_file()
1567 sl->sl_data_readable_size = vattr.va_size; in sbd_open_data_file()
1569 if (VOP_PATHCONF(sl->sl_data_vp, _PC_FILESIZEBITS, &nbits, in sbd_open_data_file()
1574 sl->sl_data_fs_nbits = (uint8_t)nbits; in sbd_open_data_file()
1576 sl->sl_total_data_size = sl->sl_lu_size; in sbd_open_data_file()
1577 if (sl->sl_flags & SL_SHARED_META) { in sbd_open_data_file()
1578 sl->sl_total_data_size += SHARED_META_DATA_SIZE; in sbd_open_data_file()
1586 if (sl->sl_total_data_size > supported_size) { in sbd_open_data_file()
1593 sl->sl_total_data_size = vattr.va_size; in sbd_open_data_file()
1594 if (sl->sl_flags & SL_SHARED_META) { in sbd_open_data_file()
1596 sl->sl_lu_size = vattr.va_size - in sbd_open_data_file()
1604 sl->sl_lu_size = vattr.va_size; in sbd_open_data_file()
1608 if (sl->sl_lu_size < SBD_MIN_LU_SIZE) { in sbd_open_data_file()
1613 if (sl->sl_lu_size & in sbd_open_data_file()
1614 ((((uint64_t)1) << sl->sl_data_blocksize_shift) - 1)) { in sbd_open_data_file()
1622 if (sl->sl_flags & SL_ZFS_META) { in sbd_open_data_file()
1623 if ((ret = VOP_IOCTL(sl->sl_data_vp, DKIOCINFO, (intptr_t)&dki, in sbd_open_data_file()
1627 sl->sl_zvol_minor = 0; in sbd_open_data_file()
1629 sl->sl_zvol_minor = dki.dki_unit; in sbd_open_data_file()
1630 if (sbd_zvol_get_volume_params(sl) == 0) in sbd_open_data_file()
1631 sl->sl_flags |= SL_CALL_ZVOL; in sbd_open_data_file()
1634 sl->sl_flags |= SL_MEDIA_LOADED; in sbd_open_data_file()
1635 mutex_exit(&sl->sl_lock); in sbd_open_data_file()
1640 (void) VOP_CLOSE(sl->sl_data_vp, flag, 1, 0, CRED(), NULL); in sbd_open_data_file()
1641 VN_RELE(sl->sl_data_vp); in sbd_open_data_file()
1643 mutex_exit(&sl->sl_lock); in sbd_open_data_file()
1648 sbd_close_lu(sbd_lu_t *sl) in sbd_close_lu() argument
1652 if (((sl->sl_flags & SL_SHARED_META) == 0) && in sbd_close_lu()
1653 (sl->sl_flags & SL_META_OPENED)) { in sbd_close_lu()
1654 if (sl->sl_flags & SL_ZFS_META) { in sbd_close_lu()
1655 rw_destroy(&sl->sl_zfs_meta_lock); in sbd_close_lu()
1656 if (sl->sl_zfs_meta) { in sbd_close_lu()
1657 kmem_free(sl->sl_zfs_meta, ZAP_MAXVALUELEN / 2); in sbd_close_lu()
1658 sl->sl_zfs_meta = NULL; in sbd_close_lu()
1662 (void) VOP_CLOSE(sl->sl_meta_vp, flag, 1, 0, in sbd_close_lu()
1664 VN_RELE(sl->sl_meta_vp); in sbd_close_lu()
1666 sl->sl_flags &= ~SL_META_OPENED; in sbd_close_lu()
1668 if (sl->sl_flags & SL_MEDIA_LOADED) { in sbd_close_lu()
1669 if (sl->sl_flags & SL_WRITE_PROTECTED) { in sbd_close_lu()
1674 (void) VOP_CLOSE(sl->sl_data_vp, flag, 1, 0, CRED(), NULL); in sbd_close_lu()
1675 VN_RELE(sl->sl_data_vp); in sbd_close_lu()
1676 sl->sl_flags &= ~SL_MEDIA_LOADED; in sbd_close_lu()
1677 if (sl->sl_flags & SL_SHARED_META) { in sbd_close_lu()
1678 sl->sl_flags &= ~SL_META_OPENED; in sbd_close_lu()
1686 sbd_lu_t *sl; in sbd_set_lu_standby() local
1692 SL_OP_MODIFY_LU, &sl); in sbd_set_lu_standby()
1705 old_access_state = sl->sl_access_state; in sbd_set_lu_standby()
1706 sl->sl_access_state = SBD_LU_TRANSITION_TO_STANDBY; in sbd_set_lu_standby()
1707 stret = stmf_set_lu_access((stmf_lu_t *)sl->sl_lu, STMF_LU_STANDBY); in sbd_set_lu_standby()
1709 sl->sl_trans_op = SL_OP_NONE; in sbd_set_lu_standby()
1711 sl->sl_access_state = old_access_state; in sbd_set_lu_standby()
1719 rw_enter(&sl->sl_access_state_lock, RW_WRITER); in sbd_set_lu_standby()
1720 sbd_close_lu(sl); in sbd_set_lu_standby()
1721 rw_exit(&sl->sl_access_state_lock); in sbd_set_lu_standby()
1723 sl->sl_trans_op = SL_OP_NONE; in sbd_set_lu_standby()
1728 sbd_close_delete_lu(sbd_lu_t *sl, int ret) in sbd_close_delete_lu() argument
1735 rw_enter(&sl->sl_access_state_lock, RW_WRITER); in sbd_close_delete_lu()
1736 sbd_close_lu(sl); in sbd_close_delete_lu()
1737 rw_exit(&sl->sl_access_state_lock); in sbd_close_delete_lu()
1739 if (sl->sl_flags & SL_LINKED) in sbd_close_delete_lu()
1740 sbd_unlink_lu(sl); in sbd_close_delete_lu()
1741 mutex_destroy(&sl->sl_metadata_lock); in sbd_close_delete_lu()
1742 mutex_destroy(&sl->sl_lock); in sbd_close_delete_lu()
1743 rw_destroy(&sl->sl_pgr->pgr_lock); in sbd_close_delete_lu()
1744 rw_destroy(&sl->sl_access_state_lock); in sbd_close_delete_lu()
1745 if (sl->sl_serial_no_alloc_size) { in sbd_close_delete_lu()
1746 kmem_free(sl->sl_serial_no, sl->sl_serial_no_alloc_size); in sbd_close_delete_lu()
1748 if (sl->sl_data_fname_alloc_size) { in sbd_close_delete_lu()
1749 kmem_free(sl->sl_data_filename, sl->sl_data_fname_alloc_size); in sbd_close_delete_lu()
1751 if (sl->sl_alias_alloc_size) { in sbd_close_delete_lu()
1752 kmem_free(sl->sl_alias, sl->sl_alias_alloc_size); in sbd_close_delete_lu()
1754 if (sl->sl_mgmt_url_alloc_size) { in sbd_close_delete_lu()
1755 kmem_free(sl->sl_mgmt_url, sl->sl_mgmt_url_alloc_size); in sbd_close_delete_lu()
1757 stmf_free(sl->sl_lu); in sbd_close_delete_lu()
1766 sbd_lu_t *sl; in sbd_create_register_lu() local
1818 sl = (sbd_lu_t *)lu->lu_provider_private; in sbd_create_register_lu()
1819 bzero(sl, alloc_sz); in sbd_create_register_lu()
1820 sl->sl_lu = lu; in sbd_create_register_lu()
1821 sl->sl_alloc_size = alloc_sz; in sbd_create_register_lu()
1822 sl->sl_pgr = (sbd_pgr_t *)(sl + 1); in sbd_create_register_lu()
1823 rw_init(&sl->sl_pgr->pgr_lock, NULL, RW_DRIVER, NULL); in sbd_create_register_lu()
1824 mutex_init(&sl->sl_lock, NULL, MUTEX_DRIVER, NULL); in sbd_create_register_lu()
1825 mutex_init(&sl->sl_metadata_lock, NULL, MUTEX_DRIVER, NULL); in sbd_create_register_lu()
1826 rw_init(&sl->sl_access_state_lock, NULL, RW_DRIVER, NULL); in sbd_create_register_lu()
1827 p = ((char *)sl) + sizeof (sbd_lu_t) + sizeof (sbd_pgr_t); in sbd_create_register_lu()
1828 sl->sl_data_filename = p; in sbd_create_register_lu()
1829 (void) strcpy(sl->sl_data_filename, namebuf + slu->slu_data_fname_off); in sbd_create_register_lu()
1830 p += strlen(sl->sl_data_filename) + 1; in sbd_create_register_lu()
1831 sl->sl_meta_offset = SBD_META_OFFSET; in sbd_create_register_lu()
1832 sl->sl_access_state = SBD_LU_ACTIVE; in sbd_create_register_lu()
1834 sl->sl_alias = sl->sl_name = sl->sl_meta_filename = p; in sbd_create_register_lu()
1835 (void) strcpy(sl->sl_meta_filename, namebuf + in sbd_create_register_lu()
1837 p += strlen(sl->sl_meta_filename) + 1; in sbd_create_register_lu()
1839 sl->sl_alias = sl->sl_name = sl->sl_data_filename; in sbd_create_register_lu()
1840 if (sbd_is_zvol(sl->sl_data_filename)) { in sbd_create_register_lu()
1841 sl->sl_flags |= SL_ZFS_META; in sbd_create_register_lu()
1842 sl->sl_meta_offset = 0; in sbd_create_register_lu()
1844 sl->sl_flags |= SL_SHARED_META; in sbd_create_register_lu()
1845 sl->sl_data_offset = SHARED_META_DATA_SIZE; in sbd_create_register_lu()
1846 sl->sl_total_meta_size = SHARED_META_DATA_SIZE; in sbd_create_register_lu()
1847 sl->sl_meta_size_used = 0; in sbd_create_register_lu()
1851 sl->sl_alias = p; in sbd_create_register_lu()
1853 p += strlen(sl->sl_alias) + 1; in sbd_create_register_lu()
1856 sl->sl_mgmt_url = p; in sbd_create_register_lu()
1858 p += strlen(sl->sl_mgmt_url) + 1; in sbd_create_register_lu()
1861 sl->sl_serial_no = (uint8_t *)p; in sbd_create_register_lu()
1862 bcopy(namebuf + slu->slu_serial_off, sl->sl_serial_no, in sbd_create_register_lu()
1864 sl->sl_serial_no_size = slu->slu_serial_size; in sbd_create_register_lu()
1869 bcopy(slu->slu_vid, sl->sl_vendor_id, 8); in sbd_create_register_lu()
1870 sl->sl_flags |= SL_VID_VALID; in sbd_create_register_lu()
1873 bcopy(slu->slu_pid, sl->sl_product_id, 16); in sbd_create_register_lu()
1874 sl->sl_flags |= SL_PID_VALID; in sbd_create_register_lu()
1877 bcopy(slu->slu_rev, sl->sl_revision, 4); in sbd_create_register_lu()
1878 sl->sl_flags |= SL_REV_VALID; in sbd_create_register_lu()
1881 sl->sl_flags |= SL_WRITE_PROTECTED; in sbd_create_register_lu()
1891 while ((1 << sl->sl_data_blocksize_shift) != slu->slu_blksize) { in sbd_create_register_lu()
1892 sl->sl_data_blocksize_shift++; in sbd_create_register_lu()
1895 sl->sl_data_blocksize_shift = 9; /* 512 by default */ in sbd_create_register_lu()
1900 sl->sl_trans_op = SL_OP_CREATE_REGISTER_LU; in sbd_create_register_lu()
1901 if (sbd_link_lu(sl) != SBD_SUCCESS) { in sbd_create_register_lu()
1909 sl->sl_lu_size = slu->slu_lu_size; in sbd_create_register_lu()
1911 ret = sbd_open_data_file(sl, err_ret, slu->slu_lu_size_valid, 0, 0); in sbd_create_register_lu()
1912 slu->slu_ret_filesize_nbits = sl->sl_data_fs_nbits; in sbd_create_register_lu()
1913 slu->slu_lu_size = sl->sl_lu_size; in sbd_create_register_lu()
1928 (void) sbd_wcd_set(1, sl); in sbd_create_register_lu()
1935 if (sbd_wcd_set(0, sl) != SBD_SUCCESS) { in sbd_create_register_lu()
1942 sbd_wcd_get(&wcd, sl); in sbd_create_register_lu()
1946 sl->sl_flags |= SL_WRITEBACK_CACHE_DISABLE | in sbd_create_register_lu()
1950 if (sl->sl_flags & SL_SHARED_META) { in sbd_create_register_lu()
1953 if (sl->sl_flags & SL_ZFS_META) { in sbd_create_register_lu()
1954 if (sbd_create_zfs_meta_object(sl) != SBD_SUCCESS) { in sbd_create_register_lu()
1959 sl->sl_meta_blocksize_shift = 0; in sbd_create_register_lu()
1962 if ((ret = lookupname(sl->sl_meta_filename, UIO_SYSSPACE, FOLLOW, in sbd_create_register_lu()
1963 NULLVPP, &sl->sl_meta_vp)) != 0) { in sbd_create_register_lu()
1967 sl->sl_meta_vtype = vt = sl->sl_meta_vp->v_type; in sbd_create_register_lu()
1968 VN_RELE(sl->sl_meta_vp); in sbd_create_register_lu()
1975 sl->sl_meta_blocksize_shift = 0; in sbd_create_register_lu()
1977 sl->sl_meta_blocksize_shift = 9; in sbd_create_register_lu()
1980 if ((ret = vn_open(sl->sl_meta_filename, UIO_SYSSPACE, flag, 0, in sbd_create_register_lu()
1981 &sl->sl_meta_vp, 0, 0)) != 0) { in sbd_create_register_lu()
1986 sl->sl_total_meta_size = sl->sl_meta_offset + sizeof (sbd_meta_start_t); in sbd_create_register_lu()
1987 sl->sl_total_meta_size += in sbd_create_register_lu()
1988 (((uint64_t)1) << sl->sl_meta_blocksize_shift) - 1; in sbd_create_register_lu()
1989 sl->sl_total_meta_size &= in sbd_create_register_lu()
1990 ~((((uint64_t)1) << sl->sl_meta_blocksize_shift) - 1); in sbd_create_register_lu()
1991 sl->sl_meta_size_used = 0; in sbd_create_register_lu()
1993 sl->sl_flags |= SL_META_OPENED; in sbd_create_register_lu()
1995 sl->sl_device_id[3] = 16; in sbd_create_register_lu()
1997 sl->sl_device_id[0] = 0xf1; in sbd_create_register_lu()
1998 sl->sl_device_id[1] = 3; in sbd_create_register_lu()
1999 sl->sl_device_id[2] = 0; in sbd_create_register_lu()
2000 bcopy(slu->slu_guid, sl->sl_device_id + 4, 16); in sbd_create_register_lu()
2007 (scsi_devid_desc_t *)&sl->sl_device_id[0]) != in sbd_create_register_lu()
2013 bcopy(sl->sl_device_id + 4, slu->slu_guid, 16); in sbd_create_register_lu()
2017 mutex_enter(&sl->sl_metadata_lock); in sbd_create_register_lu()
2018 if (sbd_write_meta_start(sl, sl->sl_total_meta_size, in sbd_create_register_lu()
2020 mutex_exit(&sl->sl_metadata_lock); in sbd_create_register_lu()
2025 mutex_exit(&sl->sl_metadata_lock); in sbd_create_register_lu()
2026 sl->sl_meta_size_used = sl->sl_meta_offset + sizeof (sbd_meta_start_t); in sbd_create_register_lu()
2028 if (sbd_write_lu_info(sl) != SBD_SUCCESS) { in sbd_create_register_lu()
2034 if (sbd_pgr_meta_init(sl) != SBD_SUCCESS) { in sbd_create_register_lu()
2044 if (sl->sl_flags & SL_ZFS_META) { in sbd_create_register_lu()
2045 if (sbd_update_zfs_prop(sl) != SBD_SUCCESS) { in sbd_create_register_lu()
2052 ret = sbd_populate_and_register_lu(sl, err_ret); in sbd_create_register_lu()
2057 sl->sl_trans_op = SL_OP_NONE; in sbd_create_register_lu()
2062 return (sbd_close_delete_lu(sl, ret)); in sbd_create_register_lu()
2092 sbd_lu_t *sl; in sbd_proxy_reg_lu() local
2104 sret = sbd_find_and_lock_lu(luid, NULL, SL_OP_MODIFY_LU, &sl); in sbd_proxy_reg_lu()
2131 if (sl->sl_access_state != SBD_LU_STANDBY) { in sbd_proxy_reg_lu()
2132 mutex_enter(&sl->sl_lock); in sbd_proxy_reg_lu()
2133 sl->sl_access_state = SBD_LU_STANDBY; in sbd_proxy_reg_lu()
2134 for (it = sl->sl_it_list; it != NULL; in sbd_proxy_reg_lu()
2140 sl->sl_flags &= ~SL_LU_HAS_SCSI2_RESERVATION; in sbd_proxy_reg_lu()
2142 mutex_exit(&sl->sl_lock); in sbd_proxy_reg_lu()
2143 sbd_pgr_reset(sl); in sbd_proxy_reg_lu()
2145 sl->sl_trans_op = SL_OP_NONE; in sbd_proxy_reg_lu()
2180 sbd_lu_t *sl; in sbd_create_standby_lu() local
2191 sl = (sbd_lu_t *)lu->lu_provider_private; in sbd_create_standby_lu()
2192 bzero(sl, alloc_sz); in sbd_create_standby_lu()
2193 sl->sl_lu = lu; in sbd_create_standby_lu()
2194 sl->sl_alloc_size = alloc_sz; in sbd_create_standby_lu()
2196 sl->sl_pgr = (sbd_pgr_t *)(sl + 1); in sbd_create_standby_lu()
2197 sl->sl_meta_filename = ((char *)sl) + sizeof (sbd_lu_t) + in sbd_create_standby_lu()
2201 (void) strcpy(sl->sl_meta_filename, slu->stlu_meta_fname); in sbd_create_standby_lu()
2203 sl->sl_name = sl->sl_meta_filename; in sbd_create_standby_lu()
2205 sl->sl_device_id[3] = 16; in sbd_create_standby_lu()
2206 sl->sl_device_id[0] = 0xf1; in sbd_create_standby_lu()
2207 sl->sl_device_id[1] = 3; in sbd_create_standby_lu()
2208 sl->sl_device_id[2] = 0; in sbd_create_standby_lu()
2209 bcopy(slu->stlu_guid, sl->sl_device_id + 4, 16); in sbd_create_standby_lu()
2210 lu->lu_id = (scsi_devid_desc_t *)sl->sl_device_id; in sbd_create_standby_lu()
2211 sl->sl_access_state = SBD_LU_STANDBY; in sbd_create_standby_lu()
2213 rw_init(&sl->sl_pgr->pgr_lock, NULL, RW_DRIVER, NULL); in sbd_create_standby_lu()
2214 mutex_init(&sl->sl_lock, NULL, MUTEX_DRIVER, NULL); in sbd_create_standby_lu()
2215 mutex_init(&sl->sl_metadata_lock, NULL, MUTEX_DRIVER, NULL); in sbd_create_standby_lu()
2216 rw_init(&sl->sl_access_state_lock, NULL, RW_DRIVER, NULL); in sbd_create_standby_lu()
2218 sl->sl_trans_op = SL_OP_CREATE_REGISTER_LU; in sbd_create_standby_lu()
2220 if (sbd_link_lu(sl) != SBD_SUCCESS) { in sbd_create_standby_lu()
2226 ret = sbd_populate_and_register_lu(sl, err_ret); in sbd_create_standby_lu()
2231 sl->sl_trans_op = SL_OP_NONE; in sbd_create_standby_lu()
2236 return (sbd_close_delete_lu(sl, ret)); in sbd_create_standby_lu()
2240 sbd_load_sli_1_0(sbd_lu_t *sl, uint32_t *err_ret) in sbd_load_sli_1_0() argument
2245 sret = sbd_read_meta_section(sl, (sm_section_hdr_t **)&sli, in sbd_load_sli_1_0()
2261 sl->sl_flags |= SL_SHARED_META; in sbd_load_sli_1_0()
2262 sl->sl_data_blocksize_shift = 9; in sbd_load_sli_1_0()
2263 sl->sl_data_offset = SHARED_META_DATA_SIZE; in sbd_load_sli_1_0()
2264 sl->sl_lu_size = sli->sli_total_store_size - SHARED_META_DATA_SIZE; in sbd_load_sli_1_0()
2265 sl->sl_total_data_size = SHARED_META_DATA_SIZE + sl->sl_lu_size; in sbd_load_sli_1_0()
2266 bcopy(sli->sli_lu_devid, sl->sl_device_id, 20); in sbd_load_sli_1_0()
2277 sbd_lu_t *sl; in sbd_import_lu() local
2301 SL_OP_IMPORT_LU, &sl); in sbd_import_lu()
2304 if (sl->sl_access_state != SBD_LU_ACTIVE) { in sbd_import_lu()
2307 lu = sl->sl_lu; in sbd_import_lu()
2308 if (sl->sl_alias_alloc_size) { in sbd_import_lu()
2309 kmem_free(sl->sl_alias, in sbd_import_lu()
2310 sl->sl_alias_alloc_size); in sbd_import_lu()
2311 sl->sl_alias_alloc_size = 0; in sbd_import_lu()
2312 sl->sl_alias = NULL; in sbd_import_lu()
2315 if (sl->sl_meta_filename == NULL) { in sbd_import_lu()
2316 sl->sl_meta_filename = sl->sl_data_filename; in sbd_import_lu()
2317 } else if (sl->sl_data_fname_alloc_size) { in sbd_import_lu()
2318 kmem_free(sl->sl_data_filename, in sbd_import_lu()
2319 sl->sl_data_fname_alloc_size); in sbd_import_lu()
2320 sl->sl_data_fname_alloc_size = 0; in sbd_import_lu()
2322 if (sl->sl_serial_no_alloc_size) { in sbd_import_lu()
2323 kmem_free(sl->sl_serial_no, in sbd_import_lu()
2324 sl->sl_serial_no_alloc_size); in sbd_import_lu()
2325 sl->sl_serial_no_alloc_size = 0; in sbd_import_lu()
2327 if (sl->sl_mgmt_url_alloc_size) { in sbd_import_lu()
2328 kmem_free(sl->sl_mgmt_url, in sbd_import_lu()
2329 sl->sl_mgmt_url_alloc_size); in sbd_import_lu()
2330 sl->sl_mgmt_url_alloc_size = 0; in sbd_import_lu()
2334 bcopy(sl->sl_device_id + 4, ilu->ilu_ret_guid, 16); in sbd_import_lu()
2335 sl->sl_trans_op = SL_OP_NONE; in sbd_import_lu()
2346 sl = (sbd_lu_t *)lu->lu_provider_private; in sbd_import_lu()
2347 bzero(sl, sizeof (*sl)); in sbd_import_lu()
2348 sl->sl_lu = lu; in sbd_import_lu()
2349 sl->sl_pgr = (sbd_pgr_t *)(sl + 1); in sbd_import_lu()
2350 sl->sl_meta_filename = ((char *)sl) + sizeof (*sl) + in sbd_import_lu()
2352 (void) strcpy(sl->sl_meta_filename, ilu->ilu_meta_fname); in sbd_import_lu()
2353 sl->sl_name = sl->sl_meta_filename; in sbd_import_lu()
2354 rw_init(&sl->sl_pgr->pgr_lock, NULL, RW_DRIVER, NULL); in sbd_import_lu()
2355 rw_init(&sl->sl_access_state_lock, NULL, RW_DRIVER, NULL); in sbd_import_lu()
2356 mutex_init(&sl->sl_lock, NULL, MUTEX_DRIVER, NULL); in sbd_import_lu()
2357 mutex_init(&sl->sl_metadata_lock, NULL, MUTEX_DRIVER, NULL); in sbd_import_lu()
2358 sl->sl_trans_op = SL_OP_IMPORT_LU; in sbd_import_lu()
2366 if (sbd_link_lu(sl) != SBD_SUCCESS) { in sbd_import_lu()
2368 bcopy(sl->sl_device_id + 4, ilu->ilu_ret_guid, 16); in sbd_import_lu()
2373 if ((ret = lookupname(sl->sl_meta_filename, UIO_SYSSPACE, FOLLOW, in sbd_import_lu()
2374 NULLVPP, &sl->sl_meta_vp)) != 0) { in sbd_import_lu()
2378 if (sbd_is_zvol(sl->sl_meta_filename)) { in sbd_import_lu()
2379 sl->sl_flags |= SL_ZFS_META; in sbd_import_lu()
2380 sl->sl_data_filename = sl->sl_meta_filename; in sbd_import_lu()
2382 sl->sl_meta_vtype = vt = sl->sl_meta_vp->v_type; in sbd_import_lu()
2383 VN_RELE(sl->sl_meta_vp); in sbd_import_lu()
2389 if (sl->sl_flags & SL_ZFS_META) { in sbd_import_lu()
2390 if (sbd_open_zfs_meta(sl) != SBD_SUCCESS) { in sbd_import_lu()
2392 sl->sl_flags &= ~SL_ZFS_META; in sbd_import_lu()
2395 if (!(sl->sl_flags & SL_ZFS_META)) { in sbd_import_lu()
2398 if ((ret = vn_open(sl->sl_meta_filename, UIO_SYSSPACE, flag, 0, in sbd_import_lu()
2399 &sl->sl_meta_vp, 0, 0)) != 0) { in sbd_import_lu()
2404 if ((sl->sl_flags & SL_ZFS_META) || (vt == VREG)) { in sbd_import_lu()
2405 sl->sl_meta_blocksize_shift = 0; in sbd_import_lu()
2407 sl->sl_meta_blocksize_shift = 9; in sbd_import_lu()
2409 sl->sl_meta_offset = (sl->sl_flags & SL_ZFS_META) ? 0 : SBD_META_OFFSET; in sbd_import_lu()
2410 sl->sl_flags |= SL_META_OPENED; in sbd_import_lu()
2412 mutex_enter(&sl->sl_metadata_lock); in sbd_import_lu()
2413 sret = sbd_load_meta_start(sl); in sbd_import_lu()
2414 mutex_exit(&sl->sl_metadata_lock); in sbd_import_lu()
2428 sret = sbd_read_meta_section(sl, (sm_section_hdr_t **)&sli, in sbd_import_lu()
2430 if ((sret == SBD_NOT_FOUND) && ((sl->sl_flags & SL_ZFS_META) == 0)) { in sbd_import_lu()
2431 ret = sbd_load_sli_1_0(sl, err_ret); in sbd_import_lu()
2474 sl->sl_lu_size = sli->sli_lu_size; in sbd_import_lu()
2475 sl->sl_data_blocksize_shift = sli->sli_data_blocksize_shift; in sbd_import_lu()
2476 bcopy(sli->sli_device_id, sl->sl_device_id, 20); in sbd_import_lu()
2478 sl->sl_serial_no_size = sl->sl_serial_no_alloc_size = in sbd_import_lu()
2480 sl->sl_serial_no = kmem_zalloc(sli->sli_serial_size, KM_SLEEP); in sbd_import_lu()
2481 bcopy(sli_buf_copy + sli->sli_serial_offset, sl->sl_serial_no, in sbd_import_lu()
2482 sl->sl_serial_no_size); in sbd_import_lu()
2485 sl->sl_total_data_size = sl->sl_lu_size; in sbd_import_lu()
2487 sl->sl_data_fname_alloc_size = strlen((char *) in sbd_import_lu()
2489 sl->sl_data_filename = kmem_zalloc( in sbd_import_lu()
2490 sl->sl_data_fname_alloc_size, KM_SLEEP); in sbd_import_lu()
2491 (void) strcpy(sl->sl_data_filename, in sbd_import_lu()
2495 if (sl->sl_flags & SL_ZFS_META) { in sbd_import_lu()
2496 sl->sl_total_data_size = sl->sl_lu_size; in sbd_import_lu()
2497 sl->sl_data_offset = 0; in sbd_import_lu()
2499 sl->sl_total_data_size = in sbd_import_lu()
2500 sl->sl_lu_size + SHARED_META_DATA_SIZE; in sbd_import_lu()
2501 sl->sl_data_offset = SHARED_META_DATA_SIZE; in sbd_import_lu()
2502 sl->sl_flags |= SL_SHARED_META; in sbd_import_lu()
2506 sl->sl_alias_alloc_size = strlen((char *)sli_buf_copy + in sbd_import_lu()
2508 sl->sl_alias = kmem_alloc(sl->sl_alias_alloc_size, KM_SLEEP); in sbd_import_lu()
2509 (void) strcpy(sl->sl_alias, (char *)sli_buf_copy + in sbd_import_lu()
2513 sl->sl_mgmt_url_alloc_size = strlen((char *)sli_buf_copy + in sbd_import_lu()
2515 sl->sl_mgmt_url = kmem_alloc(sl->sl_mgmt_url_alloc_size, in sbd_import_lu()
2517 (void) strcpy(sl->sl_mgmt_url, (char *)sli_buf_copy + in sbd_import_lu()
2521 sl->sl_flags |= SL_WRITE_PROTECTED; in sbd_import_lu()
2524 sl->sl_flags |= SL_VID_VALID; in sbd_import_lu()
2525 bcopy(sli->sli_vid, sl->sl_vendor_id, 8); in sbd_import_lu()
2528 sl->sl_flags |= SL_PID_VALID; in sbd_import_lu()
2529 bcopy(sli->sli_pid, sl->sl_product_id, 16); in sbd_import_lu()
2532 sl->sl_flags |= SL_REV_VALID; in sbd_import_lu()
2533 bcopy(sli->sli_rev, sl->sl_revision, 4); in sbd_import_lu()
2536 sl->sl_flags |= SL_WRITEBACK_CACHE_DISABLE; in sbd_import_lu()
2539 if ((sl->sl_flags & SL_SHARED_META) == 0) { in sbd_import_lu()
2543 sl->sl_data_filename = sl->sl_meta_filename; in sbd_import_lu()
2544 sl->sl_data_vp = sl->sl_meta_vp; in sbd_import_lu()
2545 sl->sl_data_vtype = sl->sl_meta_vtype; in sbd_import_lu()
2548 sret = sbd_pgr_meta_load(sl); in sbd_import_lu()
2555 ret = sbd_open_data_file(sl, err_ret, 1, data_opened, 0); in sbd_import_lu()
2566 if (sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) { in sbd_import_lu()
2567 (void) sbd_wcd_set(1, sl); in sbd_import_lu()
2574 sret = sbd_wcd_set(0, sl); in sbd_import_lu()
2576 sbd_wcd_get(&wcd, sl); in sbd_import_lu()
2581 sl->sl_flags |= SL_WRITEBACK_CACHE_DISABLE | in sbd_import_lu()
2587 ret = sbd_populate_and_register_lu(sl, err_ret); in sbd_import_lu()
2594 bcopy(sl->sl_device_id + 4, ilu->ilu_ret_guid, 16); in sbd_import_lu()
2595 sl->sl_trans_op = SL_OP_NONE; in sbd_import_lu()
2606 *slr = sl; in sbd_import_lu()
2615 mutex_enter(&sl->sl_lock); in sbd_import_lu()
2616 sl->sl_access_state = SBD_LU_ACTIVE; in sbd_import_lu()
2617 for (it = sl->sl_it_list; it != NULL; in sbd_import_lu()
2624 mutex_exit(&sl->sl_lock); in sbd_import_lu()
2629 sl->sl_access_state = SBD_LU_STANDBY; in sbd_import_lu()
2632 if (sl->sl_alias) { in sbd_import_lu()
2633 lu->lu_alias = sl->sl_alias; in sbd_import_lu()
2635 lu->lu_alias = sl->sl_name; in sbd_import_lu()
2638 sl->sl_access_state = SBD_LU_ACTIVE; in sbd_import_lu()
2653 sl->sl_trans_op = SL_OP_NONE; in sbd_import_lu()
2656 return (sbd_close_delete_lu(sl, ret)); in sbd_import_lu()
2663 sbd_lu_t *sl = NULL; in sbd_modify_lu() local
2704 SL_OP_MODIFY_LU, &sl); in sbd_modify_lu()
2708 SL_OP_MODIFY_LU, &sl); in sbd_modify_lu()
2732 ret = sbd_import_lu(ilu, struct_sz, err_ret, 1, &sl); in sbd_modify_lu()
2740 if (sl->sl_access_state != SBD_LU_ACTIVE) { in sbd_modify_lu()
2749 sret = sbd_wcd_set(mlu->mlu_writeback_cache_disable, sl); in sbd_modify_lu()
2755 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2757 if (sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) { in sbd_modify_lu()
2759 sl->sl_flags &= ~SL_WRITEBACK_CACHE_DISABLE; in sbd_modify_lu()
2760 sl->sl_flags &= ~SL_SAVED_WRITE_CACHE_DISABLE; in sbd_modify_lu()
2763 if ((sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) == 0) { in sbd_modify_lu()
2765 sl->sl_flags |= SL_WRITEBACK_CACHE_DISABLE; in sbd_modify_lu()
2766 sl->sl_flags |= SL_SAVED_WRITE_CACHE_DISABLE; in sbd_modify_lu()
2769 for (it = sl->sl_it_list; ua && it != NULL; in sbd_modify_lu()
2774 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2787 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2788 if (sl->sl_alias_alloc_size > 0 && in sbd_modify_lu()
2789 sl->sl_alias_alloc_size < alias_sz) { in sbd_modify_lu()
2790 kmem_free(sl->sl_alias, in sbd_modify_lu()
2791 sl->sl_alias_alloc_size); in sbd_modify_lu()
2792 sl->sl_alias_alloc_size = 0; in sbd_modify_lu()
2794 if (sl->sl_alias_alloc_size == 0) { in sbd_modify_lu()
2795 sl->sl_alias = kmem_alloc(alias_sz, KM_SLEEP); in sbd_modify_lu()
2796 sl->sl_alias_alloc_size = alias_sz; in sbd_modify_lu()
2798 (void) strcpy(sl->sl_alias, (char *)mlu->mlu_buf + in sbd_modify_lu()
2800 lu = sl->sl_lu; in sbd_modify_lu()
2801 lu->lu_alias = sl->sl_alias; in sbd_modify_lu()
2802 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2812 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2813 if (sl->sl_mgmt_url_alloc_size > 0 && in sbd_modify_lu()
2814 (url_sz == 0 || sl->sl_mgmt_url_alloc_size < url_sz)) { in sbd_modify_lu()
2815 kmem_free(sl->sl_mgmt_url, sl->sl_mgmt_url_alloc_size); in sbd_modify_lu()
2816 sl->sl_mgmt_url = NULL; in sbd_modify_lu()
2817 sl->sl_mgmt_url_alloc_size = 0; in sbd_modify_lu()
2820 if (sl->sl_mgmt_url_alloc_size == 0) { in sbd_modify_lu()
2821 sl->sl_mgmt_url = kmem_alloc(url_sz, KM_SLEEP); in sbd_modify_lu()
2822 sl->sl_mgmt_url_alloc_size = url_sz; in sbd_modify_lu()
2824 (void) strcpy(sl->sl_mgmt_url, (char *)mlu->mlu_buf + in sbd_modify_lu()
2827 for (it = sl->sl_it_list; it != NULL; in sbd_modify_lu()
2832 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2836 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2838 if ((sl->sl_flags & SL_WRITE_PROTECTED) == 0) { in sbd_modify_lu()
2840 sl->sl_flags |= SL_WRITE_PROTECTED; in sbd_modify_lu()
2843 if (sl->sl_flags & SL_WRITE_PROTECTED) { in sbd_modify_lu()
2845 sl->sl_flags &= ~SL_WRITE_PROTECTED; in sbd_modify_lu()
2848 for (it = sl->sl_it_list; ua && it != NULL; in sbd_modify_lu()
2853 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2861 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2862 old_size = sl->sl_lu_size; in sbd_modify_lu()
2863 sl->sl_lu_size = mlu->mlu_lu_size; in sbd_modify_lu()
2864 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2865 ret = sbd_open_data_file(sl, err_ret, 1, 1, 1); in sbd_modify_lu()
2867 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2868 sl->sl_lu_size = old_size; in sbd_modify_lu()
2869 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2873 mutex_enter(&sl->sl_lock); in sbd_modify_lu()
2874 for (it = sl->sl_it_list; it != NULL; in sbd_modify_lu()
2879 mutex_exit(&sl->sl_lock); in sbd_modify_lu()
2883 if (sbd_write_lu_info(sl) != SBD_SUCCESS) { in sbd_modify_lu()
2890 (void) sbd_close_delete_lu(sl, 0); in sbd_modify_lu()
2892 sl->sl_trans_op = SL_OP_NONE; in sbd_modify_lu()
2901 sbd_lu_t *sl = NULL; in sbd_set_global_props() local
2950 for (sl = sbd_lu_list; sl; sl = sl->sl_next) { in sbd_set_global_props()
2951 if (sl->sl_mgmt_url) { in sbd_set_global_props()
2954 mutex_enter(&sl->sl_lock); in sbd_set_global_props()
2955 for (it = sl->sl_it_list; it != NULL; in sbd_set_global_props()
2960 mutex_exit(&sl->sl_lock); in sbd_set_global_props()
2970 sbd_delete_locked_lu(sbd_lu_t *sl, uint32_t *err_ret, in sbd_delete_locked_lu() argument
2976 if ((sl->sl_state == STMF_STATE_OFFLINE) && in sbd_delete_locked_lu()
2977 !sl->sl_state_not_acked) { in sbd_delete_locked_lu()
2981 if ((sl->sl_state != STMF_STATE_ONLINE) || in sbd_delete_locked_lu()
2982 sl->sl_state_not_acked) { in sbd_delete_locked_lu()
2986 ret = stmf_ctl(STMF_CMD_LU_OFFLINE, sl->sl_lu, ssi); in sbd_delete_locked_lu()
2992 if ((sl->sl_state == STMF_STATE_OFFLINE) && in sbd_delete_locked_lu()
2993 !sl->sl_state_not_acked) { in sbd_delete_locked_lu()
3001 if (stmf_deregister_lu(sl->sl_lu) != STMF_SUCCESS) in sbd_delete_locked_lu()
3005 return (sbd_close_delete_lu(sl, 0)); in sbd_delete_locked_lu()
3011 sbd_lu_t *sl; in sbd_delete_lu() local
3019 SL_OP_DELETE_LU, &sl); in sbd_delete_lu()
3022 SL_OP_DELETE_LU, &sl); in sbd_delete_lu()
3037 ret = sbd_delete_locked_lu(sl, err_ret, &ssi); in sbd_delete_lu()
3041 sl->sl_trans_op = SL_OP_NONE; in sbd_delete_lu()
3047 sbd_data_read(sbd_lu_t *sl, struct scsi_task *task, in sbd_data_read() argument
3055 if ((offset + size) > sl->sl_lu_size) { in sbd_data_read()
3059 offset += sl->sl_data_offset; in sbd_data_read()
3071 if ((offset + size) > sl->sl_data_readable_size) { in sbd_data_read()
3073 if (offset > sl->sl_data_readable_size) { in sbd_data_read()
3077 store_end = sl->sl_data_readable_size - offset; in sbd_data_read()
3083 DTRACE_PROBE5(backing__store__read__start, sbd_lu_t *, sl, in sbd_data_read()
3093 rw_enter(&sl->sl_access_state_lock, RW_READER); in sbd_data_read()
3094 if ((sl->sl_flags & SL_MEDIA_LOADED) == 0) { in sbd_data_read()
3095 rw_exit(&sl->sl_access_state_lock); in sbd_data_read()
3099 ret = vn_rdwr(UIO_READ, sl->sl_data_vp, (caddr_t)buf, (ssize_t)size, in sbd_data_read()
3102 rw_exit(&sl->sl_access_state_lock); in sbd_data_read()
3106 DTRACE_PROBE6(backing__store__read__end, sbd_lu_t *, sl, in sbd_data_read()
3121 sbd_data_write(sbd_lu_t *sl, struct scsi_task *task, in sbd_data_write() argument
3132 if ((offset + size) > sl->sl_lu_size) { in sbd_data_write()
3136 offset += sl->sl_data_offset; in sbd_data_write()
3148 if (((sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) && in sbd_data_write()
3149 (sl->sl_flags & SL_FLUSH_ON_DISABLED_WRITECACHE)) || fua_bit) { in sbd_data_write()
3156 DTRACE_PROBE5(backing__store__write__start, sbd_lu_t *, sl, in sbd_data_write()
3166 rw_enter(&sl->sl_access_state_lock, RW_READER); in sbd_data_write()
3167 if ((sl->sl_flags & SL_MEDIA_LOADED) == 0) { in sbd_data_write()
3168 rw_exit(&sl->sl_access_state_lock); in sbd_data_write()
3171 ret = vn_rdwr(UIO_WRITE, sl->sl_data_vp, (caddr_t)buf, (ssize_t)size, in sbd_data_write()
3174 rw_exit(&sl->sl_access_state_lock); in sbd_data_write()
3178 DTRACE_PROBE6(backing__store__write__end, sbd_lu_t *, sl, in sbd_data_write()
3183 (sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) && in sbd_data_write()
3184 (sl->sl_flags & SL_FLUSH_ON_DISABLED_WRITECACHE)) { in sbd_data_write()
3185 sret = sbd_flush_data_cache(sl, 1); in sbd_data_write()
3190 } else if ((offset + size) > sl->sl_data_readable_size) { in sbd_data_write()
3194 old_size = sl->sl_data_readable_size; in sbd_data_write()
3198 } while (atomic_cas_64(&sl->sl_data_readable_size, old_size, in sbd_data_write()
3242 sbd_lu_t *sl = NULL; in sbd_get_unmap_props() local
3246 NULL, SL_OP_LU_PROPS, &sl); in sbd_get_unmap_props()
3250 &sl); in sbd_get_unmap_props()
3265 bcopy(sl->sl_device_id + 4, sup->sup_guid, 16); in sbd_get_unmap_props()
3266 if (sl->sl_flags & SL_UNMAP_ENABLED) in sbd_get_unmap_props()
3272 sl->sl_trans_op = SL_OP_NONE; in sbd_get_unmap_props()
3282 sbd_lu_t *sl = NULL; in sbd_get_lu_props() local
3288 SL_OP_LU_PROPS, &sl); in sbd_get_lu_props()
3292 SL_OP_LU_PROPS, &sl); in sbd_get_lu_props()
3305 sz = strlen(sl->sl_name) + 1; in sbd_get_lu_props()
3306 if ((sl->sl_flags & (SL_ZFS_META | SL_SHARED_META)) == 0) { in sbd_get_lu_props()
3307 if (sl->sl_data_filename) { in sbd_get_lu_props()
3308 sz += strlen(sl->sl_data_filename) + 1; in sbd_get_lu_props()
3311 sz += sl->sl_serial_no_size; in sbd_get_lu_props()
3312 if (sl->sl_alias) { in sbd_get_lu_props()
3313 sz += strlen(sl->sl_alias) + 1; in sbd_get_lu_props()
3317 if (sl->sl_mgmt_url) { in sbd_get_lu_props()
3318 sz += strlen(sl->sl_mgmt_url) + 1; in sbd_get_lu_props()
3326 sl->sl_trans_op = SL_OP_NONE; in sbd_get_lu_props()
3333 (void) strcpy((char *)oslp->slp_buf, sl->sl_name); in sbd_get_lu_props()
3335 off += strlen(sl->sl_name) + 1; in sbd_get_lu_props()
3336 if ((sl->sl_flags & (SL_ZFS_META | SL_SHARED_META)) == 0) { in sbd_get_lu_props()
3339 if (sl->sl_data_filename) { in sbd_get_lu_props()
3343 sl->sl_data_filename); in sbd_get_lu_props()
3344 off += strlen(sl->sl_data_filename) + 1; in sbd_get_lu_props()
3349 if (sl->sl_flags & SL_ZFS_META) { in sbd_get_lu_props()
3353 if (sl->sl_alias) { in sbd_get_lu_props()
3356 (void) strcpy((char *)&oslp->slp_buf[off], sl->sl_alias); in sbd_get_lu_props()
3357 off += strlen(sl->sl_alias) + 1; in sbd_get_lu_props()
3359 if (sl->sl_mgmt_url) { in sbd_get_lu_props()
3362 (void) strcpy((char *)&oslp->slp_buf[off], sl->sl_mgmt_url); in sbd_get_lu_props()
3363 off += strlen(sl->sl_mgmt_url) + 1; in sbd_get_lu_props()
3370 if (sl->sl_serial_no_size) { in sbd_get_lu_props()
3372 bcopy(sl->sl_serial_no, &oslp->slp_buf[off], in sbd_get_lu_props()
3373 sl->sl_serial_no_size); in sbd_get_lu_props()
3374 oslp->slp_serial_size = sl->sl_serial_no_size; in sbd_get_lu_props()
3376 off += sl->sl_serial_no_size; in sbd_get_lu_props()
3379 oslp->slp_lu_size = sl->sl_lu_size; in sbd_get_lu_props()
3380 oslp->slp_blksize = ((uint16_t)1) << sl->sl_data_blocksize_shift; in sbd_get_lu_props()
3382 oslp->slp_access_state = sl->sl_access_state; in sbd_get_lu_props()
3384 if (sl->sl_flags & SL_VID_VALID) { in sbd_get_lu_props()
3386 bcopy(sl->sl_vendor_id, oslp->slp_vid, 8); in sbd_get_lu_props()
3390 if (sl->sl_flags & SL_PID_VALID) { in sbd_get_lu_props()
3392 bcopy(sl->sl_product_id, oslp->slp_pid, 16); in sbd_get_lu_props()
3396 if (sl->sl_flags & SL_REV_VALID) { in sbd_get_lu_props()
3398 bcopy(sl->sl_revision, oslp->slp_rev, 4); in sbd_get_lu_props()
3402 bcopy(sl->sl_device_id + 4, oslp->slp_guid, 16); in sbd_get_lu_props()
3404 if (sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) in sbd_get_lu_props()
3406 if (sl->sl_flags & SL_SAVED_WRITE_CACHE_DISABLE) in sbd_get_lu_props()
3408 if (sl->sl_flags & SL_WRITE_PROTECTED) in sbd_get_lu_props()
3411 sl->sl_trans_op = SL_OP_NONE; in sbd_get_lu_props()
3421 sbd_get_zvol_name(sbd_lu_t *sl) in sbd_get_zvol_name() argument
3426 if (sl->sl_data_filename) in sbd_get_zvol_name()
3427 src = sl->sl_data_filename; in sbd_get_zvol_name()
3429 src = sl->sl_meta_filename; in sbd_get_zvol_name()
3446 sbd_create_zfs_meta_object(sbd_lu_t *sl) in sbd_create_zfs_meta_object() argument
3454 if ((sl->sl_zfs_meta = kmem_zalloc(ZAP_MAXVALUELEN / 2, KM_SLEEP)) in sbd_create_zfs_meta_object()
3457 rw_init(&sl->sl_zfs_meta_lock, NULL, RW_DRIVER, NULL); in sbd_create_zfs_meta_object()
3479 sbd_open_zfs_meta(sbd_lu_t *sl) in sbd_open_zfs_meta() argument
3488 if (sl->sl_zfs_meta == NULL) { in sbd_open_zfs_meta()
3489 if (sbd_create_zfs_meta_object(sl) == SBD_FAILURE) in sbd_open_zfs_meta()
3492 bzero(sl->sl_zfs_meta, (ZAP_MAXVALUELEN / 2)); in sbd_open_zfs_meta()
3495 rw_enter(&sl->sl_zfs_meta_lock, RW_WRITER); in sbd_open_zfs_meta()
3496 file = sbd_get_zvol_name(sl); in sbd_open_zfs_meta()
3504 ptr = sl->sl_zfs_meta; in sbd_open_zfs_meta()
3515 rw_exit(&sl->sl_zfs_meta_lock); in sbd_open_zfs_meta()
3523 sbd_read_zfs_meta(sbd_lu_t *sl, uint8_t *buf, uint64_t sz, uint64_t off) in sbd_read_zfs_meta() argument
3525 ASSERT(sl->sl_zfs_meta); in sbd_read_zfs_meta()
3526 rw_enter(&sl->sl_zfs_meta_lock, RW_READER); in sbd_read_zfs_meta()
3527 bcopy(&sl->sl_zfs_meta[off], buf, sz); in sbd_read_zfs_meta()
3528 rw_exit(&sl->sl_zfs_meta_lock); in sbd_read_zfs_meta()
3533 sbd_write_zfs_meta(sbd_lu_t *sl, uint8_t *buf, uint64_t sz, uint64_t off) in sbd_write_zfs_meta() argument
3535 ASSERT(sl->sl_zfs_meta); in sbd_write_zfs_meta()
3539 if ((off + sz) > sl->sl_meta_size_used) { in sbd_write_zfs_meta()
3540 sl->sl_meta_size_used = off + sz; in sbd_write_zfs_meta()
3541 if (sl->sl_total_meta_size < sl->sl_meta_size_used) { in sbd_write_zfs_meta()
3543 (((uint64_t)1) << sl->sl_meta_blocksize_shift) - 1; in sbd_write_zfs_meta()
3544 sl->sl_total_meta_size = (sl->sl_meta_size_used + in sbd_write_zfs_meta()
3548 rw_enter(&sl->sl_zfs_meta_lock, RW_WRITER); in sbd_write_zfs_meta()
3549 bcopy(buf, &sl->sl_zfs_meta[off], sz); in sbd_write_zfs_meta()
3550 rw_exit(&sl->sl_zfs_meta_lock); in sbd_write_zfs_meta()
3557 mutex_enter(&sl->sl_lock); in sbd_write_zfs_meta()
3558 if (sl->sl_trans_op != SL_OP_CREATE_REGISTER_LU) { in sbd_write_zfs_meta()
3559 mutex_exit(&sl->sl_lock); in sbd_write_zfs_meta()
3560 return (sbd_update_zfs_prop(sl)); in sbd_write_zfs_meta()
3562 mutex_exit(&sl->sl_lock); in sbd_write_zfs_meta()
3567 sbd_update_zfs_prop(sbd_lu_t *sl) in sbd_update_zfs_prop() argument
3575 ASSERT(sl->sl_zfs_meta); in sbd_update_zfs_prop()
3577 rw_enter(&sl->sl_zfs_meta_lock, RW_READER); in sbd_update_zfs_prop()
3579 dp = sl->sl_zfs_meta; in sbd_update_zfs_prop()
3580 for (i = 0; i < sl->sl_total_meta_size; i++, dp++) { in sbd_update_zfs_prop()
3587 file = sbd_get_zvol_name(sl); in sbd_update_zfs_prop()
3591 rw_exit(&sl->sl_zfs_meta_lock); in sbd_update_zfs_prop()
3613 sbd_wcd_set(int wcd, sbd_lu_t *sl) in sbd_wcd_set() argument
3620 mutex_enter(&sl->sl_lock); in sbd_wcd_set()
3621 sl->sl_flags &= ~SL_WRITEBACK_CACHE_SET_UNSUPPORTED; in sbd_wcd_set()
3623 if (sl->sl_data_vp->v_type == VREG) { in sbd_wcd_set()
3624 sl->sl_flags |= SL_FLUSH_ON_DISABLED_WRITECACHE; in sbd_wcd_set()
3628 ret = VOP_IOCTL(sl->sl_data_vp, DKIOCSETWCE, (intptr_t)&wce, FKIOCTL, in sbd_wcd_set()
3631 sl->sl_flags &= ~SL_WRITEBACK_CACHE_SET_UNSUPPORTED; in sbd_wcd_set()
3632 sl->sl_flags &= ~SL_FLUSH_ON_DISABLED_WRITECACHE; in sbd_wcd_set()
3634 sl->sl_flags |= SL_WRITEBACK_CACHE_SET_UNSUPPORTED; in sbd_wcd_set()
3635 sl->sl_flags |= SL_FLUSH_ON_DISABLED_WRITECACHE; in sbd_wcd_set()
3641 mutex_exit(&sl->sl_lock); in sbd_wcd_set()
3650 sbd_wcd_get(int *wcd, sbd_lu_t *sl) in sbd_wcd_get() argument
3655 if (sl->sl_data_vp->v_type == VREG) { in sbd_wcd_get()
3660 ret = VOP_IOCTL(sl->sl_data_vp, DKIOCGETWCE, (intptr_t)&wce, FKIOCTL, in sbd_wcd_get()
3778 sbd_unmap(sbd_lu_t *sl, dkioc_free_list_t *dfl) in sbd_unmap() argument
3792 dfl->dfl_flags = (sl->sl_flags & SL_WRITEBACK_CACHE_DISABLE) ? in sbd_unmap()
3796 vp = sl->sl_data_vp; in sbd_unmap()
3824 sbd_lu_t *sl = (sbd_lu_t *)lu->lu_provider_private; in sbd_get_lbasize_shift() local
3826 return (sl->sl_data_blocksize_shift); in sbd_get_lbasize_shift()