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.
  *