diff options
author | Yuri Pankov <yuri.pankov@nexenta.com> | 2016-10-07 19:54:32 +0300 |
---|---|---|
committer | Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org> | 2017-01-11 14:10:14 +0100 |
commit | 5f10ef697f250374b7b917e10961c4e02d4e3112 (patch) | |
tree | 1c78b923e2536701500d302c98df1d9a66941404 /usr/src/lib/lvm/libsvm | |
parent | a593473611dc9e109c40317ce52161b8cfe015ff (diff) | |
download | illumos-joyent-5f10ef697f250374b7b917e10961c4e02d4e3112.tar.gz |
6396 remove SVM
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Diffstat (limited to 'usr/src/lib/lvm/libsvm')
-rw-r--r-- | usr/src/lib/lvm/libsvm/Makefile | 55 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/Makefile.com | 58 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/check_svm.c | 169 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/debug.c | 74 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/getdrvname.c | 113 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/hdrs/libsvm.h | 70 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/hdrs/svm.h | 95 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/mapfile-vers | 52 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/metaconf.c | 232 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/metainterfaces.c | 489 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/modops.c | 120 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/start_svm.c | 284 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/common/update_mdconf.c | 379 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/i386/Makefile | 31 | ||||
-rw-r--r-- | usr/src/lib/lvm/libsvm/sparc/Makefile | 31 |
15 files changed, 0 insertions, 2252 deletions
diff --git a/usr/src/lib/lvm/libsvm/Makefile b/usr/src/lib/lvm/libsvm/Makefile deleted file mode 100644 index b849f639bf..0000000000 --- a/usr/src/lib/lvm/libsvm/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. -# -# ident "%Z%%M% %I% %E% SMI" -# - -include $(SRC)/lib/Makefile.lib - -HDRS = libsvm.h -HDRDIR = common/hdrs -SUBDIRS = $(MACH) - -all := TARGET= all -install := TARGET= install -check := TARGET= check -clean := TARGET= clean -clobber := TARGET= clobber -lint := TARGET= lint -debug := TARGET= debug - -.KEEP_STATE: - -all clean clobber debug install lint: $(SUBDIRS) - -install_h: $(ROOTHDRS) - -check: $(CHECKHDRS) - -$(SUBDIRS): FRC - @cd $@; pwd; $(MAKE) $(TARGET) - -FRC: - -include $(SRC)/lib/Makefile.targ diff --git a/usr/src/lib/lvm/libsvm/Makefile.com b/usr/src/lib/lvm/libsvm/Makefile.com deleted file mode 100644 index dbcd2a7295..0000000000 --- a/usr/src/lib/lvm/libsvm/Makefile.com +++ /dev/null @@ -1,58 +0,0 @@ -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. -# - -LIBRARY= libsvm.a -VERS= .1 -OBJECTS= check_svm.o \ - getdrvname.o \ - metaconf.o \ - metainterfaces.o \ - modops.o \ - start_svm.o \ - debug.o \ - update_mdconf.o - -include $(SRC)/lib/lvm/Makefile.lvm - -ROOTLIBDIR= $(ROOT)/usr/snadm/lib - -LIBS = $(DYNLIB) # don't build a static lib -LDLIBS += -lmeta -ldevid -lc -# -# XXX There isn't a lint library for libspmicommon. For now, we work -# around this by only using the library when we build (as opposed to lint). -# -all debug install := LDLIBS += -L$(ADJUNCT_PROTO)/usr/snadm/lib -lspmicommon - -DYNFLAGS += -R/usr/snadm/lib -CPPFLAGS += -D_FILE_OFFSET_BITS=64 -CPPFLAGS += -I$(SRC)/lib/lvm/libsvm/common/hdrs -ZDEFS = - -.KEEP_STATE: - -all: $(LIBS) - -include $(SRC)/lib/lvm/Makefile.targ diff --git a/usr/src/lib/lvm/libsvm/common/check_svm.c b/usr/src/lib/lvm/libsvm/common/check_svm.c deleted file mode 100644 index 5c92ac2788..0000000000 --- a/usr/src/lib/lvm/libsvm/common/check_svm.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2003 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <stdio.h> -#include <stdlib.h> -#include <errno.h> -#include <string.h> -#include <meta.h> -#include <sys/types.h> -#include <sys/mkdev.h> -#include <sys/stat.h> -#include <limits.h> -#include <svm.h> - -/* - * FUNCTION: valid_bootlist - * - * INPUT: file pointer, line buffer, line_length - * - * RETURN VALUES: - * 0 - SUCCESS - * -1 - FAIL - * - */ - -int -valid_bootlist(FILE *fp, int line_len) -{ - char *bp = NULL; - char *line; - - /* - * errno may not be cleared by callee routines and we - * we want to catch fgets failures hence errno is reset. - */ - errno = 0; - if ((line = malloc(line_len)) == NULL) - return (RET_ERROR); - - while (fgets(line, line_len, fp) != NULL) { - bp = strstr(line, "mddb_bootlist"); - if (bp != NULL) { - /* if not commented out then breakout */ - if (*line != '*' && *line != '#') { - break; - } - } - } - - free(line); - if (bp == NULL || errno != 0) - return (RET_ERROR); - - return (RET_SUCCESS); -} - -/* - * FUNCTION: svm_check - * Check the existance of DiskSuite or SVM - * - * INPUT: rootpath - * - * RETURN VALUES: - * 0 - SUCCESS - * -1 - FAIL - */ - -int -svm_check(char *path) -{ - FILE *fp; - char tmppath[PATH_MAX]; - int rval; - - (void) strcat(strcpy(tmppath, path), MD_CONF); - - if ((fp = fopen(tmppath, "r")) == NULL) { - rval = errno; - goto free_exit; - } - - rval = valid_bootlist(fp, MDDB_BOOTLIST_MAX_LEN); - - debug_printf("svm_check(): valid bootlist in %s. status %d\n", - tmppath, rval); - - if (rval == RET_SUCCESS) { - goto free_exit; - } - (void) fclose(fp); - - /* not found in md.conf try etc/system */ - (void) strcat(strcpy(tmppath, path), SYSTEM_FILE); - - if ((fp = fopen(tmppath, "r")) == NULL) { - rval = errno; - goto free_exit; - } - - rval = valid_bootlist(fp, MDDB_BOOTLIST_MAX_LEN); - - debug_printf("svm_check(): valid bootlist in %s. status %d\n", - tmppath, rval); -free_exit: - (void) fclose(fp); - if (rval > 0) - rval = RET_ERROR; - return (rval); -} - -/* - * FUNCTION: svm_is_md - * Check if the the given device name has an md driver. - * INPUT: special device name (/dev/dsk/c0t0d0s0 or /dev/md/dsk/d10) - * - * RETURN: - * 1 - if it is a metadevice. - * 0 - if it is not a metadevice. - */ - -int -svm_is_md(char *device_name) -{ - char buf[30]; - struct stat sbuf; - int rval = 0; - - (void) memset(buf, 0, 30); - - debug_printf("svm_is_md(): device %s\n", device_name); - if (stat(device_name, &sbuf) != 0) - return (RET_ERROR); - - if (get_drv_name(major(sbuf.st_rdev), "/", buf) == RET_ERROR) { - debug_printf("svm_is_md(): device get_drv_name failed: %s\n", - device_name); - return (0); - } - if (strcmp(buf, MD_MODULE) == 0) { - debug_printf("svm_is_md(): device %s succeed\n", device_name); - rval = 1; - } - return (rval); -} diff --git a/usr/src/lib/lvm/libsvm/common/debug.c b/usr/src/lib/lvm/libsvm/common/debug.c deleted file mode 100644 index e9e22a46d1..0000000000 --- a/usr/src/lib/lvm/libsvm/common/debug.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ - -/* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include <stdio.h> -#include <stdarg.h> -#include <stdlib.h> -#include <limits.h> -#include <string.h> - -/* The following defines are for tracing output (from libsmpicommon) */ - -#define LOG 0x1 /* write message to log file */ -#define SCR 0x2 /* write message to the screen */ -#define LOGSCR LOG|SCR /* write message to the log and screen */ -#define LEVEL0 0x0001 /* message level 0 */ -#define LEVEL1 0x0002 /* message level 1 */ -#define LEVEL2 0x0004 /* message level 2 */ -#define LEVEL3 0x0010 /* message level 3 */ - -extern int get_trace_level(void); -extern int write_status(unsigned char, unsigned int, char *, ...); - -const char libsvm_str[] = "LIB_SVM: "; -const int libsvm_len = sizeof (libsvm_str); - -/*PRINTFLIKE1*/ -void -debug_printf(char *fmt, ...) -{ - va_list ap; - char *cp; - char *buf; - - if (get_trace_level() > 5) { - if ((buf = calloc(PATH_MAX, sizeof (char))) == NULL) - return; - (void) strcpy(buf, libsvm_str); - /* - * libsvm_len - 1 is because the length includes NULL - */ - - cp = buf + (libsvm_len - 1); - va_start(ap, fmt); - if (vsnprintf(cp, (PATH_MAX - (libsvm_len - 1)), - fmt, ap) >= 0) { - (void) write_status(LOGSCR, LEVEL0, buf); - } - free(buf); - va_end(ap); - } -} diff --git a/usr/src/lib/lvm/libsvm/common/getdrvname.c b/usr/src/lib/lvm/libsvm/common/getdrvname.c deleted file mode 100644 index a24b85e040..0000000000 --- a/usr/src/lib/lvm/libsvm/common/getdrvname.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> -#include <string.h> -#include <limits.h> -#include <sys/types.h> -#include <svm.h> - -/* - * Macros to produce a quoted string containing the value of a - * preprocessor macro. For example, if SIZE is defined to be 256, - * VAL2STR(SIZE) is "256". This is used to construct format - * strings for scanf-family functions below. - */ -#define QUOTE(x) #x -#define VAL2STR(x) QUOTE(x) - -static int is_blank(char *); - -/* - * is_blank() returns 1 (true) if a line specified is composed of - * whitespace characters only. otherwise, it returns 0 (false). - * - * Note. the argument (line) must be null-terminated. - */ -static int -is_blank(char *line) -{ - for (/* nothing */; *line != '\0'; line++) - if (!isspace(*line)) - return (0); - return (1); -} - -/* - * FUNCTION: - * Return the driver name for a major number - * - * INPUT: major number, mount point for name_to_major file, pointer - * to a valid buffer. - * - * RETURN VALUES: - * 0 - SUCCESS - buf contain the driver name. - * -1 - FAIL - * - */ - -int -get_drv_name(major_t major, char *mnt, char *buf) -{ - FILE *fp; - char drv[FILENAME_MAX + 1]; - char entry[FILENAME_MAX + 1]; - char line[MAX_N2M_ALIAS_LINE], *cp; - char fname[PATH_MAX]; - - int status = RET_NOERROR; - (void) snprintf(fname, sizeof (fname), "%s%s", mnt, NAME_TO_MAJOR); - - if ((fp = fopen(fname, "r")) == NULL) { - return (RET_ERROR); - } - - while ((fgets(line, sizeof (line), fp) != NULL) && - status == RET_NOERROR) { - /* cut off comments starting with '#' */ - if ((cp = strchr(line, '#')) != NULL) - *cp = '\0'; - /* ignore comment or blank lines */ - if (is_blank(line)) - continue; - /* sanity-check */ - if (sscanf(line, - "%" VAL2STR(FILENAME_MAX) "s %" VAL2STR(FILENAME_MAX) "s", - drv, entry) != 2) { - status = RET_ERROR; - } - if (atoi(entry) == major) - break; - } - - if (status == RET_NOERROR) - (void) strcpy(buf, drv); - (void) fclose(fp); - return (status); -} diff --git a/usr/src/lib/lvm/libsvm/common/hdrs/libsvm.h b/usr/src/lib/lvm/libsvm/common/hdrs/libsvm.h deleted file mode 100644 index 98c13a2684..0000000000 --- a/usr/src/lib/lvm/libsvm/common/hdrs/libsvm.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _LIBSVM_H -#define _LIBSVM_H - -#pragma ident "%Z%%M% %I% %E% SMI" - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* - * The following declarations are for libsvm which provides - * Solaris Install with a set of interfaces required to upgrade - * mirrored roots. These are controlled by a Contract PSARC 2000/049 - * and should not be changed without informing Install. - */ - -typedef struct { - char *root_md; /* metaroot device name */ - int count; /* number of components in the metadevice */ - char *md_comps[1]; /* array of "ctds" component names */ -} svm_info_t; - -/* Convertion of MDDB flags */ -#define SVM_DONT_CONV 0x01 /* Don't convert MDDB to devid mode */ -#define SVM_CONV 0x02 /* Convert MDDB to devid mode */ - - -extern int svm_check(char *rootpath); -extern int svm_start(char *rootpath, svm_info_t **svm_infopp, - int repl_state_flag); -extern int svm_stop(); -extern void svm_free(svm_info_t *svm_infop); -extern int svm_is_md(char *device_name); -extern int svm_get_components(char *root_md_device, svm_info_t **svmpp); -extern svm_info_t *svm_alloc(); -extern int get_mdcomponents(char *devname, svm_info_t **pp); - -#ifdef __cplusplus -} -#endif - -#endif /* _LIBSVM_H */ diff --git a/usr/src/lib/lvm/libsvm/common/hdrs/svm.h b/usr/src/lib/lvm/libsvm/common/hdrs/svm.h deleted file mode 100644 index cb5d60f30f..0000000000 --- a/usr/src/lib/lvm/libsvm/common/hdrs/svm.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - - -#ifndef _SVM_H -#define _SVM_H - -#pragma ident "%Z%%M% %I% %E% SMI" - -#ifdef __cplusplus -extern "C" { -#endif - - -#define RET_SUCCESS 0 -#define RET_ERROR -1 -#define RET_NOERROR RET_SUCCESS - - -#define PROP_KEEP_REPL_STATE "md_keep_repl_state" -#define PROP_DEVID_DESTROY "md_devid_destroy" - -#define MD_CONF "/kernel/drv/md.conf" -#define MD_CONF_ORIG "/tmp/md.conf.orig" -#define SYSTEM_FILE "/etc/system" -#define NAME_TO_MAJOR "/etc/name_to_major" -#define VFSTAB "/etc/vfstab" - -#define MD_MODULE "md" -#define ROOT_MNTPT "/" -#define ROOT_METADEVICE "/dev/md/dsk/" - - -typedef enum { - MD_STR_NOTFOUND, /* bootlist not found */ - MD_STR_START, /* bootlist found, convertion started */ - MD_STR_DONE /* bootlist converversion done */ -} convflag_t; - -/* The following defines have been taken from addrem.h */ -#define MAX_CMD_LINE 256 -#define MAX_N2M_ALIAS_LINE FILENAME_MAX + FILENAME_MAX + 1 -#define MAXLEN_NAM_TO_MAJ_ENT FILENAME_MAX + MAX_STR_MAJOR + 1 -#define OPT_LEN 128 -#define CADDR_HEX_STR 16 -#define UINT_STR 10 -#define MODLINE_ENT_MAX (4 * UINT_STR) + CADDR_HEX_STR + MODMAXNAMELEN -#define MAX_STR_MAJOR UINT_STR -#define STR_LONG 10 -#define PERM_STR 4 -#define MAX_PERM_ENTRY (2 * STR_LONG) + PERM_STR + (2 * FILENAME_MAX) + 1 -#define MAX_DBFILE_ENTRY MAX_PERM_ENTRY - -extern void create_diskset_links(); -extern int copyfile(char *from, char *to); -extern int get_drv_name(major_t major, char *file_name, char *buf); -extern int mod_unload(char *modname); -extern int valid_bootlist(FILE *fp, int line_size); -extern int convert_bootlist(char *systemfile, char *mdconf, char **tmpfilename); -extern int write_xlate_to_mdconf(char *rootpath); -extern int write_targ_nm_table(char *rootpath); -extern int get_rootmetadevice(char *rootpath, char **devname); -extern void set_upgrade_prop(char *prop_name, int val); -extern int is_upgrade_prop(char *prop_name); -extern int create_in_file_prop(char *prop_name, char *fname); -extern void debug_printf(char *fmt, ...); - -#ifdef __cplusplus -} -#endif - -#endif /* _SVM_H */ diff --git a/usr/src/lib/lvm/libsvm/common/mapfile-vers b/usr/src/lib/lvm/libsvm/common/mapfile-vers deleted file mode 100644 index a75ef31094..0000000000 --- a/usr/src/lib/lvm/libsvm/common/mapfile-vers +++ /dev/null @@ -1,52 +0,0 @@ -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. -# - -# -# MAPFILE HEADER START -# -# WARNING: STOP NOW. DO NOT MODIFY THIS FILE. -# Object versioning must comply with the rules detailed in -# -# usr/src/lib/README.mapfiles -# -# You should not be making modifications here until you've read the most current -# copy of that file. If you need help, contact a gatekeeper for guidance. -# -# MAPFILE HEADER END -# - -$mapfile_version 2 - -SYMBOL_VERSION SUNWprivate_1.1 { - global: - svm_alloc; - svm_check; - svm_free; - svm_get_components; - svm_is_md; - svm_start; - svm_stop; - local: - *; -}; diff --git a/usr/src/lib/lvm/libsvm/common/metaconf.c b/usr/src/lib/lvm/libsvm/common/metaconf.c deleted file mode 100644 index 5dabb6be59..0000000000 --- a/usr/src/lib/lvm/libsvm/common/metaconf.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include <stdio.h> -#include <ctype.h> -#include <sys/types.h> -#include <sys/mkdev.h> -#include <sys/stat.h> -#include <unistd.h> -#include <dirent.h> -#include <limits.h> -#include <string.h> -#include <libsvm.h> -#include <svm.h> -#include <errno.h> - - -#define VERSION "1.0" -#define DISK_DIR "/dev/rdsk" - -extern int _map_to_effective_dev(); - -static int is_blank(char *); - -/* - * is_blank() returns 1 (true) if a line specified is composed of - * whitespace characters only. otherwise, it returns 0 (false). - * - * Note. the argument (line) must be null-terminated. - */ -static int -is_blank(char *line) -{ - for (/* nothing */; *line != '\0'; line++) - if (!isspace(*line)) - return (0); - return (1); -} - -/* - * FUNCTION: write_targ_nm_table - * creates a tuple table of <driver name, major number > in md.conf - * INPUT: rootpath - * - * RETURN VALUES: - * RET_SUCCESS - * RET_ERROR - */ - -int -write_targ_nm_table(char *path) -{ - FILE *targfp = NULL; - FILE *mdfp = NULL; - char buf[PATH_MAX], *cp; - int retval = RET_SUCCESS; - int first_entry = 1; - - if ((mdfp = fopen(MD_CONF, "a")) == NULL) - return (RET_ERROR); - - (void) snprintf(buf, sizeof (buf), "%s%s", path, NAME_TO_MAJOR); - - if ((targfp = fopen(buf, "r")) == NULL) { - (void) fclose(mdfp); - return (RET_ERROR); - } - - while (fgets(buf, PATH_MAX, targfp) != NULL && - (retval == RET_SUCCESS)) { - /* remove a new-line character for md_targ_nm_table */ - if ((cp = strchr(buf, '\n')) != NULL) - *cp = 0; - /* cut off comments starting with '#' */ - if ((cp = strchr(buf, '#')) != NULL) - *cp = 0; - /* ignore comment or blank lines */ - if (is_blank(buf)) - continue; - if (first_entry) { - if (fprintf(mdfp, "md_targ_nm_table=\"%s\"", buf) < 0) - retval = RET_ERROR; - first_entry = 0; - } else { - if (fprintf(mdfp, ",\"%s\"", buf) < 0) - retval = RET_ERROR; - } - } - if (!first_entry) - if (fprintf(mdfp, ";\n") < 0) - retval = RET_ERROR; - (void) fclose(mdfp); - (void) fclose(targfp); - return (retval); -} - -/* - * FUNCTION: write_xlate_to_mdconf - * creates a tuple table of <miniroot devt, target devt> in md.conf - * INPUT: rootpath - * - * RETURN VALUES: - * RET_SUCCESS - * RET_ERROR - */ - -int -write_xlate_to_mdconf(char *path) -{ - FILE *fptr = NULL; - struct dirent *dp; - DIR *dirp; - struct stat statb_dev; - struct stat statb_edev; - char *devname; - char edevname[PATH_MAX]; - char targname[PATH_MAX]; - char diskdir[PATH_MAX]; - char linkpath[PATH_MAX]; - int first_devid = 1; - int ret = RET_SUCCESS; - - if ((fptr = fopen(MD_CONF, "a")) == NULL) { - return (RET_ERROR); - } - - - (void) snprintf(diskdir, sizeof (diskdir), "%s%s", path, DISK_DIR); - if ((dirp = opendir(diskdir)) == NULL) { - (void) fclose(fptr); - return (RET_ERROR); - } - - /* special case to write the first tuple in the table */ - while (((dp = readdir(dirp)) != (struct dirent *)0) && - (ret != RET_ERROR)) { - if ((strcmp(dp->d_name, ".") == 0) || - (strcmp(dp->d_name, "..") == 0)) - continue; - - if ((strlen(diskdir) + strlen(dp->d_name) + 2) > PATH_MAX) { - continue; - } - - (void) snprintf(targname, sizeof (targname), "%s/%s", - diskdir, dp->d_name); - - /* - * stat /devices to see if it's a devfs based file system - * On Solaris 10 and up, the devfs has been built on the - * fly for the mini-root. We need to adjust the path - * accordingly. - * If it's not devfs, just use the targname as it is. - */ - - if (stat("/devices", &statb_dev) != 0) { - continue; - } - - if (strncmp("devfs", statb_dev.st_fstype, 5) == 0) { - if (readlink(targname, linkpath, - sizeof (linkpath)) == -1) { - continue; - } - /* - * turn ../../devices/<path> into /devices/<path> - * and stat that into statb_dev - */ - if (stat(strstr(linkpath, "/devices"), - &statb_dev) != 0) { - continue; - } - } else { - if (stat(targname, &statb_dev) != 0) { - continue; - } - } - - if ((devname = strstr(targname, DISK_DIR)) == NULL) { - continue; - } - - if (_map_to_effective_dev((char *)devname, (char *)&edevname) - != 0) { - continue; - } - - if (stat(edevname, &statb_edev) != 0) { - continue; - } - - if (first_devid) { - if (fprintf(fptr, "md_xlate_ver=\"%s\";\n" - "md_xlate=%lu,%lu", VERSION, - statb_edev.st_rdev, statb_dev.st_rdev) < 0) - ret = RET_ERROR; - first_devid = 0; - } - if (fprintf(fptr, ",%lu,%lu", statb_edev.st_rdev, - statb_dev.st_rdev) < 0) - ret = RET_ERROR; - } /* end while */ - - if (!first_devid) - if (fprintf(fptr, ";\n") < 0) - ret = RET_ERROR; - (void) fclose(fptr); - (void) closedir(dirp); - return (ret); -} diff --git a/usr/src/lib/lvm/libsvm/common/metainterfaces.c b/usr/src/lib/lvm/libsvm/common/metainterfaces.c deleted file mode 100644 index b33ab778f1..0000000000 --- a/usr/src/lib/lvm/libsvm/common/metainterfaces.c +++ /dev/null @@ -1,489 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <stdio.h> -#include <string.h> -#include <sys/vfstab.h> -#include <meta.h> -#include <libsvm.h> -#include <svm.h> -#include <sdssc.h> - - -extern int mod_unload(char *modname); -static int inited = 0; - -/* - * FUNCTION: init_metalib - * initialize libmeta only once. - * - * RETURN VALUES: - * 0 - SUCCESS - * -1 - FAIL - */ - -static int -init_metalib() -{ - int largc = 1; - char *largv = "libsvm"; - md_error_t status = mdnullerror; - - if (!inited) { - if (md_init_nosig(largc, &largv, 0, 1, &status) != 0 || - meta_check_root(&status) != 0) { - return (-1); - } - inited = 1; - } - return (RET_SUCCESS); -} - -/* - * FUNCTION: reset_metalib - * - * INPUT: ptr to md_error_t - */ - -static void -reset_metalib(md_error_t *ep) -{ - inited = 0; - (void) close_admin(ep); -} - -/* - * FUNCTION: metahalt - * halt the metadb - * - */ - -static void -metahalt() -{ - mdsetname_t *sp; - md_error_t status = mdnullerror; - - (void) init_metalib(); - if ((sp = metasetname(MD_LOCAL_NAME, &status)) == NULL) { - return; - } - if (meta_lock(sp, TRUE, &status)) { - return; - } - if (metaioctl(MD_HALT, NULL, &status, NULL) != 0) { - debug_printf("metahalt(): errno %d\n", - status.info.md_error_info_t_u.sys_error.errnum); - } - (void) meta_unlock(sp, &status); - reset_metalib(&status); -} - -/* - * FUNCTION: svm_stop - * Halt the SDS/SVM configuration and unload md module. - * - * RETURN VALUES: - * 0 - SUCCESS - * RET_ERROR - */ - -#define MAX_TIMEOUT 1800 -int -svm_stop() -{ - int rval = RET_SUCCESS; - int timeval = 0; - int sleep_int = 5; - - metahalt(); - - if ((rval = mod_unload(MD_MODULE)) != 0) { - timeval += sleep_int; - (void) sleep(sleep_int); - while (timeval < MAX_TIMEOUT) { - if ((rval = mod_unload(MD_MODULE)) == 0) { - debug_printf("svm_stop(): mod_unload succeeded." - " Time %d\n", timeval); - - break; - } - - debug_printf("svm_stop(): mod_unload failed. Trying " - "in %d s (%d)\n", sleep_int, timeval); - - timeval += sleep_int; - (void) sleep(sleep_int); - metahalt(); - } - - if (rval != 0) { - rval = RET_ERROR; - debug_printf("svm_stop(): mod_unload FAILED!\n"); - } - } - - return (rval); -} - -/* - * FUNCTION: get_rootmetadevice - * parses the vfstab to return the metadevice - * - * INPUT: - * mount point - * mdname - pointer to string pointer that will contain the - * metadevice name. Caller must free the allocated space. - * RETURN VALUES: - * mdname - md root device name - * 0 - SUCCESS - * !0 - FAIL - * > 0 errno - * RET_ERROR - */ - -int -get_rootmetadevice(char *mntpath, char **mdname) -{ - struct vfstab v; - FILE *fp; - int rval = RET_SUCCESS; - char *cp; - char vfstab_name[PATH_MAX + 1]; - - if (mdname == NULL) - return (EINVAL); - - *mdname = NULL; - - if (snprintf(vfstab_name, PATH_MAX + 1, "%s%s", mntpath, VFSTAB) < 0) - return (ENOMEM); - - debug_printf("get_rootmetadevice(): mntpath %s %s\n", mntpath, - vfstab_name); - - if ((fp = fopen(vfstab_name, "r")) == NULL) { - rval = errno; - return (rval); - } - - if ((rval = getvfsfile(fp, &v, ROOT_MNTPT)) != 0) { - goto out; - } - - - debug_printf("get_rootmetadevice(): vfs_special %s\n", v.vfs_special); - if (strstr(v.vfs_special, ROOT_METADEVICE) == NULL) { - /* md device not found */ - rval = RET_ERROR; - goto out; - } - - /* found a match fill it and return */ - cp = v.vfs_special + strlen(ROOT_METADEVICE); - - *mdname = (char *)malloc(strlen(cp) + 1); - - if (*mdname == NULL) { - rval = ENOMEM; - goto out; - } - (void) strcpy(*mdname, cp); - debug_printf("get_rootmetadevice(): *mdname %s rval %d\n", - *mdname, rval); -out: - (void) fclose(fp); - return (rval); -} - -/* - * FUNCTION: create_diskset_links - * Create the diskset name symlinks in /dev/md from the diskset - * names found in the set records. These are normally created - * in rpc.metad when you create the set but those symlinks are - * sitting out on the real system disk and we're running off the - * devfs that got created when we booted off the install image. - */ - -void -create_diskset_links() -{ - int max_sets; - int i; - md_error_t error = mdnullerror; - - /* - * Resolve the function pointers for libsds_sc so that we can - * snarf the set records. - */ - (void) sdssc_bind_library(); - (void) init_metalib(); - - if ((max_sets = get_max_sets(&error)) == 0) { - debug_printf("create_diskset_links(): get_max_sets failed\n"); - mdclrerror(&error); - return; - } - - for (i = 1; i < max_sets; i++) { - md_set_record *sr; - char setname[MAXPATHLEN]; - char setnum[MAXPATHLEN]; - - if ((sr = metad_getsetbynum(i, &error)) == NULL) { - mdclrerror(&error); - continue; - } - - (void) snprintf(setname, MAXPATHLEN, "/dev/md/%s", - sr->sr_setname); - (void) snprintf(setnum, MAXPATHLEN, "shared/%d", i); - /* - * Ignore failures to create the symlink. This could - * happen because suninstall is restartable so the - * symlink might have already been created. - */ - (void) symlink(setnum, setname); - } -} - -/* - * FUNCTION: svm_alloc - * Return a pointer to an opaque piece of zeroed memory. - * - * RETURN VALUES: - * Non null - SUCCESS - * NULL - FAIL - */ - -svm_info_t * -svm_alloc() -{ - return ((svm_info_t *)calloc(1, sizeof (svm_info_t))); -} - -/* - * FUNCTION: svm_free - * - * INPUT: pointer to struct svm_info - */ - -void -svm_free(svm_info_t *svmp) -{ - int i; - - if (svmp == NULL) - return; - - for (i = 0; i < svmp->count; i++) { - free(svmp->md_comps[i]); - } - free(svmp->root_md); - free(svmp); -} - -/* - * FUNCTION: get_mdcomponents - * Given "uname" metadevice, return the physical components - * of that metadevice. - * - * INPUT: - * uname - metadevice name - * - * RETURN VALUES: - * svmp - structure containing md name and components - * RET_SUCCESS - * RET_ERROR - * - */ - -int -get_mdcomponents(char *uname, svm_info_t **svmpp) -{ - - svm_info_t *svmp; - md_error_t status, *ep; - mdname_t *namep; - mdnamelist_t *nlp = NULL; - mdnamelist_t *p; - mdsetname_t *sp = NULL; - char *strp = NULL; - int rval, cnt; - - rval = RET_SUCCESS; - cnt = 0; - status = mdnullerror; - ep = &status; - svmp = *svmpp; - - (void) init_metalib(); - - debug_printf("get_mdcomponents(): Enter unit name %s\n", uname); - - if (((namep = metaname(&sp, uname, META_DEVICE, ep)) == NULL) || - (metachkmeta(namep, ep) != 0)) { - debug_printf("get_mdcomponents(): " - "metaname or metachkmeta failed\n"); - mdclrerror(ep); - return (RET_ERROR); - } - - debug_printf("get_mdcomponents(): meta_getdevs %s\n", namep->cname); - - if ((meta_getdevs(sp, namep, &nlp, ep)) < 0) { - debug_printf("get_mdcomponents(): " - "comp %s - meta_getdevs failed\n", uname); - metafreenamelist(nlp); - mdclrerror(ep); - return (RET_ERROR); - } - - /* compute the number of devices */ - - for (p = nlp, cnt = 0; p != NULL; p = p->next, cnt++) - ; - - /* - * Need to add n -1 components since slvmp already has space - * for one device. - */ - - svmp = (svm_info_t *)realloc(svmp, sizeof (svm_info_t) + - (sizeof (char *) * (cnt - 1))); - - if (svmp == NULL) { - debug_printf("get_mdcomponents(): realloc of svmp failed\n"); - metafreenamelist(nlp); - return (RET_ERROR); - } - - - for (p = nlp, cnt = 0; p != NULL; p = p->next, cnt++) { - mdname_t *devnp = p->namep; - - if ((strp = strdup(devnp->cname)) == NULL) { - rval = RET_ERROR; - break; - } - svmp->md_comps[cnt] = strp; - } - - /* count is set to the number of devices in the list */ - - svmp->count = cnt; - svmp->root_md = strdup(uname); - if (rval == RET_SUCCESS && svmp->root_md != NULL) { - debug_printf("get_mdcomponents(): root_md %s count %d \n", - svmp->root_md, svmp->count); - for (cnt = 0; cnt < svmp->count; cnt++) - debug_printf("get_mdcomponents(): %s\n", - svmp->md_comps[cnt]); - } else { - rval = RET_ERROR; - svm_free(svmp); - svmp = NULL; - debug_printf("get_mdcomponents(): malloc failed\n"); - - } - - - metafreenamelist(nlp); - *svmpp = svmp; - return (rval); -} - - -/* - * FUNCTION: svm_get_components - * return svm_infop with the components of a metadevice. - * - * INPUT: - * md_device - eg. /dev/md/dsk/d10, /dev/md/foo/dsk/d10, or - * /dev/md/shared/1/dsk/d10 - * - * RETURN: - * 0 - SUCCESS - * !0 - FAIL - */ - -int -svm_get_components(char *md_device, svm_info_t **svmpp) -{ - int len; - - /* - * If this is a named diskset with a shared name - * (e.g. /dev/md/shared/1/dsk/d10) call get_mdcomponents with - * the diskset and metadevice name (e.g. foo/d10). - * Otherwise this is a regular name (e.g. /dev/md/dsk/d10 or - * /dev/md/foo/dsk/d10 or d10 or foo/d10) all of which - * get_mdcomponents can handle directly. - */ - - len = strlen("/dev/md/shared/"); - if (strncmp(md_device, "/dev/md/shared/", len) == 0) { - int numlen; - int setnum; - char *cp; - char *slashp; - char mdname[MAXPATHLEN]; - mdsetname_t *sp; - md_error_t error = mdnullerror; - - cp = md_device + len; - - if ((slashp = strstr(cp, "/")) == NULL) - return (RET_ERROR); - numlen = slashp - cp; - if (numlen >= MAXPATHLEN - 1) - return (RET_ERROR); - - (void) strlcpy(mdname, cp, numlen + 1); - /* setnum now contains the diskset number */ - setnum = atoi(mdname); - if ((sp = metasetnosetname(setnum, &error)) == NULL || - !mdisok(&error)) - return (RET_ERROR); - - cp = slashp + 1; - /* cp now pointing at dsk/... */ - if ((slashp = strstr(cp, "/")) == NULL) - return (RET_ERROR); - - (void) snprintf(mdname, MAXPATHLEN, "%s/%s", sp->setname, - slashp + 1); - /* mdname now contains diskset and metadevice name e.g. foo/d10 */ - - debug_printf("svm_get_components(): mdname %s\n", mdname); - return (get_mdcomponents(mdname, svmpp)); - - } else { - debug_printf("svm_get_components(): md_device %s\n", md_device); - return (get_mdcomponents(md_device, svmpp)); - } -} diff --git a/usr/src/lib/lvm/libsvm/common/modops.c b/usr/src/lib/lvm/libsvm/common/modops.c deleted file mode 100644 index 78914a9069..0000000000 --- a/usr/src/lib/lvm/libsvm/common/modops.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <sys/types.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <sys/wait.h> -#include <sys/errno.h> -#include <sys/modctl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <svm.h> - -/* - * FUNCTION: get modid - * Given a module name returns module id. - * - * INPUT: module name - * - * RETURN VALUES: - * > 0 SUCCESS - * -1 FAIL - */ - -static int -get_modid(char *modname) -{ - struct modinfo modinfo; - int id; - int rval = RET_ERROR; - - id = -1; /* look for all modules */ - - modinfo.mi_id = modinfo.mi_nextid = id; - modinfo.mi_info = MI_INFO_ALL | MI_INFO_NOBASE; - - do { - if (modctl(MODINFO, id, &modinfo) < 0) - break; - - modinfo.mi_name[MODMAXNAMELEN - 1] = '\0'; - /* if we find a match break out */ - if (strcmp(modinfo.mi_name, modname) == 0) { - rval = modinfo.mi_id; - break; - } - /* LINTED */ - } while (1); - - return (rval); -} - -/* - * FUNCTION: mod_unload - * unload a module. - * - * INPUT: module name - * - * RETURN VALUES: - * 0 - SUCCESS - * !0 - FAIL - * > 0 errno - * -1 - * NOTE: If we fail to get the module id because the module is not - * currently loaded we still want to try to force a reload of the - * .conf file when it does load. - */ -int -mod_unload(char *modname) -{ - int id; - major_t major; - int rval = RET_SUCCESS; - - id = get_modid(modname); - - if (id != -1) { - if (modctl(MODUNLOAD, id) < 0) { - rval = errno; - } - } - - if ((modctl(MODGETMAJBIND, modname, strlen(modname) + 1, - &major)) != 0) { - return (errno); - } - - if ((modctl(MODUNLOADDRVCONF, major) != 0) || - (modctl(MODLOADDRVCONF, major) != 0)) { - return (errno); - } - - return (rval); -} diff --git a/usr/src/lib/lvm/libsvm/common/start_svm.c b/usr/src/lib/lvm/libsvm/common/start_svm.c deleted file mode 100644 index f423d4f418..0000000000 --- a/usr/src/lib/lvm/libsvm/common/start_svm.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <ctype.h> -#include <malloc.h> -#include <stdio.h> -#include <fcntl.h> -#include <stdlib.h> -#include <errno.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/param.h> -#include <limits.h> -#include <meta.h> -#include <svm.h> -#include <libsvm.h> - -#define MODEBITS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) -#define ISREG(A) (((A).st_mode & S_IFMT) == S_IFREG) -#define DEFAULT_ROOTDIR "/a" - - -/* - * FUNCTION: svm_start - * starts SDS/SVM configuration. If root mirroring exists then the - * components of the root mirror are returned in svmpp. - * - * INPUT: mntpnt - root mount point - * svmpp - prealloced structure to return components - * repl_state_flag - SVM_CONV/SVM_DONT_CONV - * - * RETURN: - * 0 - SUCCESS - * !0 - ERROR - * if > 0 errno - */ - -int -svm_start(char *mntpnt, svm_info_t **svmpp, int repl_state_flag) -{ - char *rootdir, *tf; - char *mdevnamep = NULL; - char system_file[PATH_MAX]; - char mdconf[PATH_MAX]; - int rval = 0; - - if (mntpnt == NULL) - rootdir = DEFAULT_ROOTDIR; - else - rootdir = mntpnt; - - if ((rval = snprintf(system_file, PATH_MAX, "%s%s", - rootdir, SYSTEM_FILE)) < 0) { - return (RET_ERROR); - } - - if ((rval = snprintf(mdconf, PATH_MAX, "%s%s", - rootdir, MD_CONF)) < 0) { - return (RET_ERROR); - } - - debug_printf("svm_start(): repl_state_flag %s\n", - (repl_state_flag == SVM_DONT_CONV) ? "SVM_DONT_CONV": - "SVM_CONV"); - - if (copyfile(MD_CONF, MD_CONF_ORIG)) - return (RET_ERROR); - - switch (rval = convert_bootlist(system_file, mdconf, &tf)) { - case 0: - case -1: /* found in etc/system flag */ - break; - default: /* convert bootlist failed */ - debug_printf("svm_start(): convert_bootlist failed." - "rval %d\n", rval); - goto errout; - } - - if (repl_state_flag == SVM_DONT_CONV) { - rval = create_in_file_prop(PROP_KEEP_REPL_STATE, tf); - if (rval != 0) - goto errout; - } - - if (is_upgrade_prop(PROP_DEVID_DESTROY)) { - rval = create_in_file_prop(PROP_DEVID_DESTROY, tf); - /* - * For the idempotent behavior reset internal - * flag incase we have to return due to errors - */ - set_upgrade_prop(PROP_DEVID_DESTROY, 0); - if (rval != 0) - goto errout; - } - - - /* - * Since svm_start is called only after svm_check, - * we can assume that there is a valid metadb. If the mddb_bootlist - * is not found in etc/system, then it must be in md.conf which - * we copied to temporary file pointed to by tf - */ - if (copyfile(tf, MD_CONF)) { - debug_printf("svm_start(): copy of %s to %s failed\n", tf, - MD_CONF); - goto errout; - } - - if ((rval = write_xlate_to_mdconf(rootdir)) != 0) { - debug_printf("svm_start(): write_xlate_to_mdconf(%s) failed\n", - rootdir); - goto errout; - } - - if ((rval = write_targ_nm_table(rootdir)) != 0) { - goto errout; - } - - /* run devfsadm to create the devices specified in md.conf */ - if ((rval = system("/usr/sbin/devfsadm -r /tmp -p " - "/tmp/root/etc/path_to_inst -i md")) != 0) { - debug_printf("svm_start(): devfsadm -i md failed: %d\n", rval); - goto errout; - } - - /* - * We have to unload md after the devfsadm run so that when metainit - * loads things it gets the right information from md.conf. - */ - if (rval = svm_stop()) { - debug_printf("svm_start(): svm_stop failed.\n"); - return (RET_ERROR); - } - - if ((rval = system("/usr/sbin/metainit -r")) != 0) { - debug_printf("svm_start(): metainit -r failed: %d\n", rval); - goto errout; - } - - create_diskset_links(); - - if ((rval = system("/usr/sbin/metasync -r")) != 0) { - debug_printf("svm_start(): metasync -r failed: %d\n", rval); - goto errout; - } - - /* - * We ignore failures from metadevadm, since it can fail if - * miniroot dev_t's don't match target dev_ts. But it still - * will update md.conf with device Id information which is - * why we are calling it here. - */ - - (void) system("/usr/sbin/metadevadm -r"); - - /* - * check to see if we have a root metadevice and if so - * get its components. - */ - - if ((rval = get_rootmetadevice(rootdir, &mdevnamep)) == 0) { - if (rval = get_mdcomponents(mdevnamep, svmpp)) { - debug_printf("svm_start(): get_mdcomponents(%s,..)" - "failed %d\n", mdevnamep, rval); - goto errout; - } - - } else { - rval = 0; /* not a mirrored root */ - debug_printf("svm_start(): get_rootmetadevice(%s,..) " - "No root mirrors! ", rootdir); - } -errout: - free(mdevnamep); - if (rval != 0) { - struct stat sbuf; - if (stat(MD_CONF_ORIG, &sbuf) == 0) - (void) copyfile(MD_CONF_ORIG, MD_CONF); - debug_printf("svm_start(): svm_start failed: %d\n", rval); - } else { - int i; - - if ((*svmpp)->count > 0) { - debug_printf("svmpp: "); - debug_printf(" root_md: %s", (*svmpp)->root_md); - debug_printf(" count: %d", (*svmpp)->count); - for (i = 0; i < (*svmpp)->count; i++) { - debug_printf(" md_comps[%d]: %s", i, - (*svmpp)->md_comps[i]); - } - debug_printf(" \n"); - } else { - if ((*svmpp)->count == 0) - debug_printf("svm_start(): no mirrored root\n"); - } - debug_printf("svm_start(): svm_start succeeded.\n"); - } - return (rval); -} - -/* - * FUNCTION: copyfile - * - * INPUT: self descriptive - * - * RETURN: - * RET_SUCCESS - * RET_ERROR - */ -int -copyfile(char *from, char *to) -{ - int fromfd, tofd; - char buf[1024]; - ssize_t rbytes; - struct stat fromstat; - - if ((fromfd = open(from, O_RDONLY | O_NDELAY)) < 0) - return (RET_ERROR); - - if ((fstat(fromfd, &fromstat) < 0) || ! ISREG(fromstat)) { - (void) close(fromfd); - return (RET_ERROR); - } - - if ((tofd = open(to, O_CREAT | O_WRONLY | O_TRUNC, - (fromstat.st_mode & MODEBITS))) < 0) { - (void) close(fromfd); - return (RET_ERROR); - } - - /* - * in case the file exists then perm is forced by this chmod - */ - (void) fchmod(tofd, fromstat.st_mode & MODEBITS); - - for (;;) { - rbytes = read(fromfd, buf, sizeof (buf)); - /* - * no need to check for negative values since the file - * has been successfully stat'ed - */ - if (rbytes == 0) - break; - if (write(tofd, buf, rbytes) != rbytes) { - rbytes = -1; - break; - } - } - - (void) close(fromfd); - (void) close(tofd); - if (rbytes < 0) { - (void) unlink(to); - return (RET_ERROR); - } - return (RET_SUCCESS); -} diff --git a/usr/src/lib/lvm/libsvm/common/update_mdconf.c b/usr/src/lib/lvm/libsvm/common/update_mdconf.c deleted file mode 100644 index f757648911..0000000000 --- a/usr/src/lib/lvm/libsvm/common/update_mdconf.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <devid.h> -#include <errno.h> -#include <string.h> -#include <assert.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <meta.h> -#include <libsvm.h> -#include <svm.h> - -/* - * magic strings in system - */ -#define BEGMDDBSTR "* Begin MDD database info (do not edit)\n" -#define ENDMDDBSTR "* End MDD database info (do not edit)\n" -#define NEW_BEGMDDBSTR "# Begin MDD database info (do not edit)\n" -#define NEW_ENDMDDBSTR "# End MDD database info (do not edit)\n" - -#define MDDBBOOTLIST "mddb_bootlist" - -#define SYS_COMMENTCHAR '*' -#define CONF_COMMENTCHAR '#' - -typedef struct { - char *prop_name; - int prop_val; -} md_prop_t; - -typedef enum { - MDDB_SYS_FILE, - MDDB_MDCONF_FILE -} ftype_t; - -static md_prop_t upgrade_props[] = { - { PROP_KEEP_REPL_STATE, 0 }, - { PROP_DEVID_DESTROY, 0}, - { NULL, 0} -}; - -/* - * The following functions manage upgrade properties - */ - -void -set_upgrade_prop(char *prop_name, int val) -{ - md_prop_t *upp; - - upp = &upgrade_props[0]; - - for (; upp->prop_name != NULL; upp++) { - if (strcmp(upp->prop_name, prop_name) == 0) { - upp->prop_val = val; - return; - } - } -} - -int -is_upgrade_prop(char *prop_name) -{ - md_prop_t *upp; - - upp = &upgrade_props[0]; - - for (; upp->prop_name != NULL; upp++) { - if (strcmp(upp->prop_name, prop_name) == 0) { - return (upp->prop_val == 1); - } - } - return (0); -} - -int -create_in_file_prop(char *prop_name, char *fname) -{ - FILE *fp; - md_prop_t *upp; - int rval = RET_ERROR; - - if ((fp = fopen(fname, "a")) == NULL) { - return (errno); - } - - upp = &upgrade_props[0]; - - for (; upp->prop_name != NULL; upp++) { - if (strcmp(upp->prop_name, prop_name) == 0) { - (void) fprintf(fp, "%s = 1;\n", upp->prop_name); - rval = RET_SUCCESS; - break; - } - } - (void) fclose(fp); - return (rval); -} - -static int -is_devid_added(char *str) -{ - int cnt = 0; - char *cp; - - /* there are exactly 3 colons in the string for devid */ - for (cnt = 0; cnt < 4; cnt++) { - if ((cp = strchr(str, ':')) == NULL) - break; - str = ++cp; - } - return (cnt == 3); -} - -/* - * FUNCTION: parse_bootlist - * Parse the bootlist and add the extra field to mddb_boolist entry to - * conform to devid changes. - * - * Old format: <drivername>:<minor_number>:<offset> - * New format: <drivername>:<minor_number>:<offset>:<devid> - * Devid of id0 implies no device id. - * - * INPUT: *line - contains the mddb_bootlist - * *tfp - File pointer to the md.conf.tmp file. - * - * RETURN: - * 0 - Success - * > 0 - Failure. Errno returned - */ - -static int -parse_bootlist(char *line, FILE *tfp) -{ - char output[1024]; - char *cp; - int retval = RET_SUCCESS; - - (void) memset(output, 0, sizeof (output)); - - if (line[0] == SYS_COMMENTCHAR) { - output[0] = CONF_COMMENTCHAR; - } - /* move the line start of mddbbootlist */ - cp = strstr(line, MDDBBOOTLIST); - if (cp != NULL) - line = cp; - - /* grab the "mddb_boolist" word */ - cp = strtok(line, "= "); - (void) strcat(output, cp); - (void) strcat(output, "=\042"); /* add back the EQUAL and QUOTE chars */ - - /* - * The line passed in is for example, - * mddb_bootlist1="sd:7:16:id1,sd@SIBM_DDRS34560SUN4.2G2N9688_____/h"; - * At this point mddb_bootlist and "=" have been parsed out. - * The remaining string consists of driver name, colon separator and - * the device id(if it exists) within quotes. - * The deviceid string can contain upper and lower letters, digits - * and +-.=_~. Quotes, spaces and \n and \t are not - * allowed. They are converted to either _ or their ascii value. - * So using space,\n,;and quotes as a separator is safe. - */ - - while ((cp = strtok(NULL, " \n\042;")) != NULL) { - (void) strcat(output, cp); - if (!is_devid_added(cp)) { - /* append :id0 for devid */ - (void) strcat(strcat(output, ":"), - devid_str_encode(NULL, NULL)); - - /* no devid => SDS->SLVM migration. Set the flag */ - set_upgrade_prop(PROP_DEVID_DESTROY, 1); - } - (void) strcat(output, " "); /* leave space between entries */ - } - - /* remove the extra space at the end */ - output[strlen(output) - 1] = 0; - (void) strcat(output, "\042;\n"); - if (fprintf(tfp, "%s", output) < 0) { - retval = errno; - } - return (retval); -} - -/* - * FUNCTION: snarf_n_modify_bootlist - * This function stuffs the mddb_bootlist from either etc/system - * or kernel/drv/md.conf of the target system into a temporary file tname. - * The boolist in the temporary file is in device ID format. - * - * INPUT: *fp - file pointer that contains the mddb_bootlist. - * *tname - file into which the modified bootlist will be written to. - * * buf - buffer handed by upper level routine for reading in contents. - * * bufsiz - size of the buffer. - * mddb_file - flag - * - * RETURN: - * 0 - Success - * > 0 - Failure. Errno returned. - */ - -static int -snarf_n_modify_bootlist( - FILE *fp, /* File pointer to snarf from */ - char *tname, /* name of the temporary file */ - char *buf, /* Buffer to read into */ - int bufsz, /* buffer size */ - ftype_t mddb_file /* flag to indicate if its /etc/system or md.conf */ -) -{ - FILE *tfp; - int rval = RET_SUCCESS; - char *fname = SYSTEM_FILE; - char *mddb_start = BEGMDDBSTR; - char *mddb_end = ENDMDDBSTR; - convflag_t cstatus = MD_STR_NOTFOUND; - - if (mddb_file == MDDB_MDCONF_FILE) { - fname = MD_CONF; - mddb_start = NEW_BEGMDDBSTR; - mddb_end = NEW_ENDMDDBSTR; - } - - if ((tfp = fopen(tname, "a")) == NULL) - return (errno); - debug_printf("Convert from %s\n", fname); - - rewind(fp); - while (fgets(buf, bufsz, fp) != NULL) { - if (strcmp(buf, mddb_start) == 0) { - cstatus = MD_STR_START; - if (fprintf(tfp, "%s", NEW_BEGMDDBSTR) < 0) { - rval = errno; - break; - } - continue; - } - if (cstatus == MD_STR_START) { - if (strcmp(buf, mddb_end) == 0) { - cstatus = MD_STR_DONE; - if (fprintf(tfp, "%s", NEW_ENDMDDBSTR) < 0) { - rval = errno; - break; - } - - if (mddb_file == MDDB_MDCONF_FILE) - continue; - else - break; - } - - rval = parse_bootlist(buf, tfp); - if (rval == RET_SUCCESS) - continue; - else - break; - } - if (mddb_file == MDDB_MDCONF_FILE) { - if (fprintf(tfp, "%s\n", buf) < 0) { - rval = errno; - break; - } - } - - } /* while (fgets */ - - if (cstatus == MD_STR_NOTFOUND || cstatus == MD_STR_START) - rval = RET_ERROR; - (void) fclose(tfp); - return (rval); -} - - -/* - * FUNCTION: convert_bootlist - * Get the bootlist from $ROOT/etc/system and add modified bootlist to - * md.conf. - * The function converts the mddb_boolist format from that in /etc/system - * to md.conf. Also new fields are added to handle the devid id format. - * A copy of md.conf is created and the new entries are added to it. - * The name of the new file is returned to the calling program. - * - * Input: system file name - * md.conf file name - * pointer to temp file name. - * RETURN: - * *tname - name of the file that has md.conf + new mddb_boolist entries - * 0 - success - * -1 - mddb_bootlist not found - * > 0 - errno - * - */ - -int -convert_bootlist( - char *sname, /* system file name */ - char *mdconf, /* md.conf file name */ - char **tname /* temp file name */ -) -{ - FILE *fp; - char cmd_buf[MDDB_BOOTLIST_MAX_LEN]; - int retval = RET_SUCCESS; - - /* check names */ - assert(sname != NULL); - assert(tname != NULL); - - /* get temp name */ - *tname = tmpnam(NULL); - - if ((fp = fopen(sname, "r")) == NULL) { - retval = errno; - goto out; - } - if (valid_bootlist(fp, MDDB_BOOTLIST_MAX_LEN) == RET_SUCCESS) { - if ((retval = copyfile(mdconf, *tname)) == RET_ERROR) { - debug_printf("convert_bootlist: copy %s %s failed\n", - mdconf, *tname); - goto out; - } - retval = snarf_n_modify_bootlist(fp, *tname, cmd_buf, - MDDB_BOOTLIST_MAX_LEN, MDDB_SYS_FILE); - } else { - (void) fclose(fp); /* close system file */ - if ((fp = fopen(mdconf, "r")) == NULL) { - retval = errno; - goto out; - } - if (valid_bootlist(fp, MDDB_BOOTLIST_MAX_LEN) == RET_ERROR) { - retval = RET_ERROR; - goto out; - } - retval = snarf_n_modify_bootlist(fp, *tname, cmd_buf, - MDDB_BOOTLIST_MAX_LEN, MDDB_MDCONF_FILE); - } -out: - debug_printf("convert_bootlist: retval %d\n", retval); - if (fp != NULL) - (void) fclose(fp); - - if ((retval != RET_SUCCESS) && (*tname != NULL)) { - (void) unlink(*tname); - free(*tname); - } - return (retval); -} diff --git a/usr/src/lib/lvm/libsvm/i386/Makefile b/usr/src/lib/lvm/libsvm/i386/Makefile deleted file mode 100644 index 4fc9526b2a..0000000000 --- a/usr/src/lib/lvm/libsvm/i386/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License, Version 1.0 only -# (the "License"). You may not use this file except in compliance -# with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright (c) 2001 by Sun Microsystems, Inc. -# All rights reserved. -# -# ident "%Z%%M% %I% %E% SMI" -# - -include ../Makefile.com - -install debug: $(ROOTLIBDIR) $(ROOTLIBS) $(ROOTLINKS) diff --git a/usr/src/lib/lvm/libsvm/sparc/Makefile b/usr/src/lib/lvm/libsvm/sparc/Makefile deleted file mode 100644 index 4fc9526b2a..0000000000 --- a/usr/src/lib/lvm/libsvm/sparc/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License, Version 1.0 only -# (the "License"). You may not use this file except in compliance -# with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# -# -# Copyright (c) 2001 by Sun Microsystems, Inc. -# All rights reserved. -# -# ident "%Z%%M% %I% %E% SMI" -# - -include ../Makefile.com - -install debug: $(ROOTLIBDIR) $(ROOTLIBS) $(ROOTLINKS) |