Print this page
Revert "Revert "6602 lofi should support labeled devices""
This reverts commit 21386c8bd8477810b291eee22e08f1382e70cdf3.
Revert "6602 lofi should support labeled devices"
This reverts commit 406fc5100dac8d225a315a6def6be8d628f34e24.
OS-92 NexentaStor 4.0.1-PASSIV-12022013: Cannot mount root after install
@@ -21,10 +21,11 @@
/*
* Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
* Copyright 2016 Toomas Soome <tsoome@me.com>
*/
/*
* This module provides support for labeling operations for target
@@ -678,19 +679,18 @@
* Return values:
* 0 Success
* ENXIO creating minor nodes failed.
* EINVAL invalid arg, unsupported tg_ops version
*/
+/*ARGSUSED8*/
int
cmlb_attach(dev_info_t *devi, cmlb_tg_ops_t *tgopsp, int device_type,
boolean_t is_removable, boolean_t is_hotpluggable, char *node_type,
int alter_behavior, cmlb_handle_t cmlbhandle, void *tg_cookie)
{
struct cmlb_lun *cl = (struct cmlb_lun *)cmlbhandle;
- diskaddr_t cap;
- int status;
ASSERT(VALID_BOOLEAN(is_removable));
ASSERT(VALID_BOOLEAN(is_hotpluggable));
if (tgopsp->tg_version < TG_DK_OPS_VERSION_1)
@@ -712,20 +712,10 @@
cl->cl_msglog_flag |= CMLB_ALLOW_2TB_WARN;
#if defined(__i386) || defined(__amd64)
cl->cl_logical_drive_count = 0;
#endif
- if (!is_removable) {
- mutex_exit(CMLB_MUTEX(cl));
- status = DK_TG_GETCAP(cl, &cap, tg_cookie);
- mutex_enter(CMLB_MUTEX(cl));
- if (status == 0 && cap > CMLB_EXTVTOC_LIMIT) {
- /* set default EFI if > 2TB */
- cl->cl_def_labeltype = CMLB_LABEL_EFI;
- }
- }
-
/* create minor nodes based on default label type */
cl->cl_last_labeltype = CMLB_LABEL_UNDEF;
cl->cl_cur_labeltype = CMLB_LABEL_UNDEF;
if (cmlb_create_minor_nodes(cl) != 0) {
@@ -768,10 +758,36 @@
i_ddi_prop_dyn_driver_set(CMLB_DEVINFO(cl), NULL);
cl->cl_state = CMLB_INITED;
mutex_exit(CMLB_MUTEX(cl));
}
+/*
+ * cmlb_workaround_off_by_one:
+ *
+ * Enables the workaround for the ancient off-by-one bug in sd.
+ * See comment preceding cmlb_attach().
+ *
+ * Arguments
+ * cmlbhandle cmlb handle associated with device.
+ *
+ *
+ * Notes:
+ * This should only be called by sd_unit_attach(), and only before
+ * validating the label for the first time.
+ *
+ * Return values:
+ * None.
+ */
+
+void
+cmlb_workaround_off_by_one(cmlb_handle_t cmlbhandle)
+{
+ struct cmlb_lun *cl = (struct cmlb_lun *)cmlbhandle;
+
+ cl->cl_alter_behavior |= CMLB_OFF_BY_ONE;
+}
+
/*
* cmlb_validate:
*
* Validates label.
*