summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Balfour <Andrew.Balfour@Sun.COM>2008-09-02 13:45:22 -0700
committerAndrew Balfour <Andrew.Balfour@Sun.COM>2008-09-02 13:45:22 -0700
commit4deca0aa2cec144a6025c5a10c197bf98ca741f1 (patch)
treeeb1e0339d8c0e6886bf06d17095704ae082f8258
parent0e233487902b546a8949e2147ff8af45b1afc77c (diff)
downloadillumos-joyent-4deca0aa2cec144a6025c5a10c197bf98ca741f1.tar.gz
6659374 metainit - when submirrors are over 1TB (approx), mirror size != submirror size
-rw-r--r--usr/src/head/meta.h9
-rw-r--r--usr/src/lib/lvm/libmeta/common/meta_nameinfo.c49
-rw-r--r--usr/src/lib/lvm/libmeta/common/meta_stripe.c13
3 files changed, 38 insertions, 33 deletions
diff --git a/usr/src/head/meta.h b/usr/src/head/meta.h
index fcc1cd2f0b..6480e2b89a 100644
--- a/usr/src/head/meta.h
+++ b/usr/src/head/meta.h
@@ -26,8 +26,6 @@
#ifndef _META_H
#define _META_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
@@ -112,6 +110,13 @@ die right now
/* disk label size */
#define VTOC_SIZE (16)
+/* EFI geometry data */
+#define MD_EFI_FG_HEADS 128
+#define MD_EFI_FG_SECTORS 256
+#define MD_EFI_FG_RPM 7200
+#define MD_EFI_FG_WRI 1
+#define MD_EFI_FG_RRI 1
+
/* maximum ctd name size (in # of digits) for printing out */
#define CTD_FORMAT_LEN 6
diff --git a/usr/src/lib/lvm/libmeta/common/meta_nameinfo.c b/usr/src/lib/lvm/libmeta/common/meta_nameinfo.c
index fe7664dc13..b1ff708b7c 100644
--- a/usr/src/lib/lvm/libmeta/common/meta_nameinfo.c
+++ b/usr/src/lib/lvm/libmeta/common/meta_nameinfo.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <dlfcn.h>
#include <meta.h>
#include <metadyn.h>
@@ -37,13 +35,6 @@
#include <sys/scsi/generic/inquiry.h>
#include <sys/efi_partition.h>
-#define MD_EFI_FG_HEADS 128
-#define MD_EFI_FG_SECTORS 256
-#define MD_EFI_FG_RPM 7200
-#define MD_EFI_FG_WRI 1
-#define MD_EFI_FG_RRI 1
-
-
typedef struct ctlr_cache {
char *ctlr_nm;
int ctlr_ty;
@@ -68,7 +59,7 @@ metagetset(
/* metadevice */
if (metaismeta(np))
return (metasetnosetname(MD_MIN2SET(meta_getminor(np->dev)),
- ep));
+ ep));
/* regular device */
if (meta_is_drive_in_anyset(np->drivenamep, &sp, bypass_daemon,
@@ -108,7 +99,7 @@ meta_efi_to_mdgeom(struct dk_gpt *gpt, mdgeom_t *mdgp)
{
(void) memset(mdgp, '\0', sizeof (*mdgp));
mdgp->ncyl = (gpt->efi_last_u_lba - gpt->efi_first_u_lba) /
- (MD_EFI_FG_HEADS * MD_EFI_FG_SECTORS);
+ (MD_EFI_FG_HEADS * MD_EFI_FG_SECTORS);
mdgp->nhead = MD_EFI_FG_HEADS;
mdgp->nsect = MD_EFI_FG_SECTORS;
mdgp->rpm = MD_EFI_FG_RPM;
@@ -157,7 +148,7 @@ meta_efi_to_mdvtoc(struct dk_gpt *gpt, mdvtoc_t *mdvp)
if ((gpt->efi_parts[i].p_tag == V_RESERVED) &&
(gpt->efi_parts[i].p_name != NULL)) {
(void) strlcpy(typename, gpt->efi_parts[i].p_name,
- EFI_PART_NAME_LEN);
+ EFI_PART_NAME_LEN);
/* Stop at first (if any) space or tab */
(void) strtok(typename, " \t");
mdvp->typename = Strdup(typename);
@@ -200,9 +191,9 @@ meta_mdvtoc_to_efi(mdvtoc_t *mdvp, struct dk_gpt **gpt)
* we use p_name of the reserved partition
*/
if (((*gpt)->efi_parts[i].p_tag == V_RESERVED) &&
- (mdvp->typename != NULL)) {
+ (mdvp->typename != NULL)) {
(void) strlcpy((*gpt)->efi_parts[i].p_name, typename,
- EFI_PART_NAME_LEN);
+ EFI_PART_NAME_LEN);
}
}
}
@@ -256,8 +247,8 @@ char *
getdrvnode(mdname_t *np, md_error_t *ep)
{
char *devicespath,
- *drvnode,
- *cp;
+ *drvnode,
+ *cp;
if ((devicespath = metagetdevicesname(np, ep)) == NULL)
return (NULL);
@@ -298,8 +289,8 @@ static void *
meta_load_dl(mdname_t *np, md_error_t *ep)
{
char *drvnode,
- newpath[MAXPATHLEN],
- *p;
+ newpath[MAXPATHLEN],
+ *p;
void *cookie;
if ((drvnode = getdrvnode(np, ep)) != NULL) {
@@ -347,7 +338,7 @@ meta_match_names(mdname_t *np, struct dk_cinfo *cp, mdcinfo_t *mdcp,
{
void *cookie;
meta_convert_e ((*fptr)(mdname_t *, struct dk_cinfo *, mdcinfo_t *,
- md_error_t *));
+ md_error_t *));
if ((cookie = meta_load_dl(np, ep)) != NULL) {
fptr = (meta_convert_e (*)(mdname_t *, struct dk_cinfo *,
@@ -365,8 +356,8 @@ int
meta_match_enclosure(mdname_t *np, mdcinfo_t *mdcp, md_error_t *ep)
{
meta_enclosure_e e,
- ((*fptr)(mdname_t *, mdcinfo_t *,
- md_error_t *));
+ ((*fptr)(mdname_t *, mdcinfo_t *,
+ md_error_t *));
void *cookie;
if ((cookie = meta_load_dl(np, ep)) != NULL) {
@@ -611,7 +602,7 @@ metagetvtoc(
if (partno >= gpt->efi_nparts) {
efi_free(gpt);
(void) mddeverror(ep, MDE_INVALID_PART, NODEV64,
- rname);
+ rname);
return (NULL);
}
@@ -1253,12 +1244,12 @@ meta_isopen(
* Hence NO_LOG and NO_MCT
*/
err = mdmn_send_message(
- sp->setno,
- MD_MN_MSG_CLU_CHECK,
- MD_MSGF_NO_MCT | MD_MSGF_STOP_ON_ERROR |
- MD_MSGF_NO_LOG | MD_MSGF_OVERRIDE_SUSPEND,
- (char *)&d, sizeof (md_isopen_t),
- &resp, ep);
+ sp->setno,
+ MD_MN_MSG_CLU_CHECK,
+ MD_MSGF_NO_MCT | MD_MSGF_STOP_ON_ERROR |
+ MD_MSGF_NO_LOG | MD_MSGF_OVERRIDE_SUSPEND,
+ (char *)&d, sizeof (md_isopen_t),
+ &resp, ep);
if (err == 0) {
d.isopen = resp->mmr_exitval;
} else {
diff --git a/usr/src/lib/lvm/libmeta/common/meta_stripe.c b/usr/src/lib/lvm/libmeta/common/meta_stripe.c
index 856dfe747f..b8a9dd68c4 100644
--- a/usr/src/lib/lvm/libmeta/common/meta_stripe.c
+++ b/usr/src/lib/lvm/libmeta/common/meta_stripe.c
@@ -23,8 +23,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Just in case we're not in a build environment, make sure that
* TEXT_DOMAIN gets set to something.
@@ -1837,6 +1835,17 @@ stripe_geom(
is_sp = 1;
}
+ /*
+ * If the stripe is to be multi-terabyte we should
+ * use EFI geometries, else we can get rounding errors
+ * in meta_setup_geom().
+ */
+
+ if (ms->c.un_actual_tb > MD_MAX_BLKS_FOR_SMALL_DEVS) {
+ geomp->nhead = MD_EFI_FG_HEADS;
+ geomp->nsect = MD_EFI_FG_SECTORS;
+ geomp->rpm = MD_EFI_FG_RPM;
+ }
/* setup geometry from first device */
if (meta_setup_geom((md_unit_t *)ms, stripep->common.namep, geomp,