summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShidokht Yadegari <Shidokht.Yadegari@Sun.COM>2009-02-10 15:18:05 -0800
committerShidokht Yadegari <Shidokht.Yadegari@Sun.COM>2009-02-10 15:18:05 -0800
commit7e70b4340d3d7810bfad5f96702d8589852b432e (patch)
tree49b92fb891c8fdd5f1d4ff351f4c82c8617a2e23
parentd05ba1e6d821a370b97d38899e74cd824e81ab9c (diff)
downloadillumos-joyent-7e70b4340d3d7810bfad5f96702d8589852b432e.tar.gz
6785800 cmlb: flag for internal minor node creation is ignored in extvtoc functions
6775732 s8-s15 minor nodes missing on disks larger than 2TB with VTOC on x86 6771992 macro extvtoctovtoc missing copying the timestamp 6786639 cmlb: typo in detecting mbr
-rw-r--r--usr/src/uts/common/io/cmlb.c34
-rw-r--r--usr/src/uts/common/sys/vtoc.h4
2 files changed, 31 insertions, 7 deletions
diff --git a/usr/src/uts/common/io/cmlb.c b/usr/src/uts/common/io/cmlb.c
index 218370abfc..2c50a0566b 100644
--- a/usr/src/uts/common/io/cmlb.c
+++ b/usr/src/uts/common/io/cmlb.c
@@ -113,6 +113,16 @@ static struct driver_minor_data dk_minor_data_efi[] = {
{"f", 5, S_IFBLK},
{"g", 6, S_IFBLK},
{"wd", 7, S_IFBLK},
+#if defined(_SUNOS_VTOC_16)
+ {"i", 8, S_IFBLK},
+ {"j", 9, S_IFBLK},
+ {"k", 10, S_IFBLK},
+ {"l", 11, S_IFBLK},
+ {"m", 12, S_IFBLK},
+ {"n", 13, S_IFBLK},
+ {"o", 14, S_IFBLK},
+ {"p", 15, S_IFBLK},
+#endif /* defined(_SUNOS_VTOC_16) */
#if defined(_FIRMWARE_NEEDS_FDISK)
{"q", 16, S_IFBLK},
{"r", 17, S_IFBLK},
@@ -128,6 +138,16 @@ static struct driver_minor_data dk_minor_data_efi[] = {
{"f,raw", 5, S_IFCHR},
{"g,raw", 6, S_IFCHR},
{"wd,raw", 7, S_IFCHR},
+#if defined(_SUNOS_VTOC_16)
+ {"i,raw", 8, S_IFCHR},
+ {"j,raw", 9, S_IFCHR},
+ {"k,raw", 10, S_IFCHR},
+ {"l,raw", 11, S_IFCHR},
+ {"m,raw", 12, S_IFCHR},
+ {"n,raw", 13, S_IFCHR},
+ {"o,raw", 14, S_IFCHR},
+ {"p,raw", 15, S_IFCHR},
+#endif /* defined(_SUNOS_VTOC_16) */
#if defined(_FIRMWARE_NEEDS_FDISK)
{"q,raw", 16, S_IFCHR},
{"r,raw", 17, S_IFCHR},
@@ -2135,7 +2155,7 @@ cmlb_check_efi_mbr(uchar_t *buf, int *is_mbr)
if (LE_16(mbp->signature) != MBB_MAGIC) {
if (is_mbr != NULL)
- is_mbr = FALSE;
+ *is_mbr = FALSE;
return (TRUE);
}
@@ -3778,6 +3798,8 @@ cmlb_dkio_set_extvtoc(struct cmlb_lun *cl, dev_t dev, caddr_t arg, int flag,
{
int rval = 0;
struct vtoc user_vtoc;
+ boolean_t internal;
+
/*
* Checking callers data model does not make much sense here
@@ -3800,6 +3822,7 @@ cmlb_dkio_set_extvtoc(struct cmlb_lun *cl, dev_t dev, caddr_t arg, int flag,
vtoctovtoc32(user_extvtoc, user_vtoc);
#endif
+ internal = ((cl->cl_alter_behavior & (CMLB_INTERNAL_MINOR_NODES)) != 0);
mutex_enter(CMLB_MUTEX(cl));
#if defined(__i386) || defined(__amd64)
if (cl->cl_tgt_blocksize != cl->cl_sys_blocksize) {
@@ -3817,12 +3840,13 @@ cmlb_dkio_set_extvtoc(struct cmlb_lun *cl, dev_t dev, caddr_t arg, int flag,
cmlb_clear_efi(cl, tg_cookie);
ddi_remove_minor_node(CMLB_DEVINFO(cl), "wd");
ddi_remove_minor_node(CMLB_DEVINFO(cl), "wd,raw");
- (void) ddi_create_minor_node(CMLB_DEVINFO(cl), "h",
+ (void) cmlb_create_minor(CMLB_DEVINFO(cl), "h",
S_IFBLK, (CMLBUNIT(dev) << CMLBUNIT_SHIFT) | WD_NODE,
- cl->cl_node_type, NULL);
- (void) ddi_create_minor_node(CMLB_DEVINFO(cl), "h,raw",
+ cl->cl_node_type, NULL, internal);
+ (void) cmlb_create_minor(CMLB_DEVINFO(cl), "h,raw",
S_IFCHR, (CMLBUNIT(dev) << CMLBUNIT_SHIFT) | WD_NODE,
- cl->cl_node_type, NULL);
+ cl->cl_node_type, NULL, internal);
+
mutex_enter(CMLB_MUTEX(cl));
if ((rval = cmlb_build_label_vtoc(cl, &user_vtoc)) == 0) {
diff --git a/usr/src/uts/common/sys/vtoc.h b/usr/src/uts/common/sys/vtoc.h
index 3600fd85bd..004b49097a 100644
--- a/usr/src/uts/common/sys/vtoc.h
+++ b/usr/src/uts/common/sys/vtoc.h
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -158,7 +158,7 @@ struct extvtoc {
v.v_part[i].p_flag = extv.v_part[i].p_flag; \
v.v_part[i].p_start = (daddr_t)extv.v_part[i].p_start; \
v.v_part[i].p_size = (long)extv.v_part[i].p_size; \
- v.timestamp[i] = (time_t)v.timestamp[i]; \
+ v.timestamp[i] = (time_t)extv.timestamp[i]; \
} \
bcopy(extv.v_asciilabel, v.v_asciilabel, LEN_DKL_ASCII); \
}