1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22/* 23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27#ifndef _META_H 28#define _META_H 29 30#include <limits.h> 31#include <stdio.h> 32#include <stdlib.h> 33#include <fcntl.h> 34#include <errno.h> 35#include <string.h> 36#include <unistd.h> 37#include <libgen.h> 38#include <locale.h> 39#include <time.h> 40#include <assert.h> 41#include <stdarg.h> 42#include <signal.h> 43#include <devid.h> 44#include <sys/types.h> 45#include <sys/stat.h> 46#include <sys/sysmacros.h> 47#include <sys/mkdev.h> 48#include <sys/time.h> 49#include <sys/dkio.h> 50#include <sys/vtoc.h> 51#include <sys/efi_partition.h> 52#include <meta_basic.h> 53#include <mdiox.h> 54#include <metamed.h> 55#include <sys/lvm/mdio.h> 56#include <sys/lvm/md_mddb.h> 57#include <sys/lvm/md_sp.h> 58#include <sys/lvm/mdmn_commd.h> 59 60#ifdef __cplusplus 61extern "C" { 62#endif 63 64/* debug malloc include */ 65#ifdef DEBUG_MALLOC 66#ifdef _REENTRANT 67die right now 68#endif 69#include <../lib/malloclib/malloc.h> 70#endif 71 72/* 73 * useful macros 74 */ 75#ifndef min 76#define min(x, y) (((x) < (y)) ? (x) : (y)) 77#endif 78#ifndef max 79#define max(x, y) (((x) > (y)) ? (x) : (y)) 80#endif 81#ifndef rounddown 82#define rounddown(x, y) (((x) / (y)) * (y)) 83#endif 84 85/* 86 * external names 87 */ 88 89#define METATAB "/etc/lvm/md.tab" 90#define METACONF "/etc/lvm/md.cf" 91#define METACONFTMP "/etc/lvm/md.cf.new" 92#define META_DBCONF "/etc/lvm/mddb.cf" 93#define META_DBCONFTMP "/etc/lvm/mddb.cf.new" 94#define META_MNSET_NODELIST "/var/run/nodelist" 95#define METALOG "/etc/lvm/md.log" 96#define METALOCK "/etc/lvm/lock" 97#define METADEVPATH "/etc/lvm/devpath" 98#define METALOGENV "MD_LOG" 99#define METAPKGROOT "/usr" 100#define ADMSPECIAL "/dev/md/admin" 101 102#define MDB_STR "metadevice state database" 103#define META_LONGDISKNAME_STR "<long disk name>" 104 105/* default database size (4MB) */ 106#define MD_DBSIZE (8192) 107 108/* default Multinode database size (16MB) */ 109#define MD_MN_DBSIZE (32768) 110 111/* disk label size */ 112#define VTOC_SIZE (16) 113 114/* EFI geometry data */ 115#define MD_EFI_FG_HEADS 128 116#define MD_EFI_FG_SECTORS 256 117#define MD_EFI_FG_RPM 7200 118#define MD_EFI_FG_WRI 1 119#define MD_EFI_FG_RRI 1 120 121/* maximum ctd name size (in # of digits) for printing out */ 122#define CTD_FORMAT_LEN 6 123 124/* Recommend timeout in seconds for RPC client creation. */ 125#define MD_CLNT_CREATE_TOUT (60) 126 127/* 128 * If event needs to be checked during wait of MD_CLNT_CREATE_TOUT, 129 * spin checking for event and then waiting for MD_CLNT_CREATE_SUBTIMEOUT 130 * seconds until MD_CLNT_CREATE_TOUT seconds are used. 131 */ 132#define MD_CLNT_CREATE_SUBTIMEOUT (5) 133 134/* 135 * metaclust verbosity levels and what they are for. Messages upto MC_LOG2 136 * will also be logged in syslog. 137 */ 138#define MC_LOG0 0 /* special class. log messages regardless of */ 139 /* debug level */ 140#define MC_LOG1 1 /* log standard error messages */ 141#define MC_LOG2 2 /* log metaclust step level timing messages */ 142#define MC_LOG3 3 /* log per set level timing messages */ 143 /* intended for use in loops walking mn sets */ 144#define MC_LOG4 4 /* log per device level timing messages */ 145 /* intended for use in loops walking devices */ 146#define MC_LOG5 5 /* typically for use in deep nested loops */ 147 /* or in libmeta routines */ 148 149/* 150 * for meta_print* options 151 */ 152typedef uint_t mdprtopts_t; 153#define PRINT_SHORT 0x00000001 154#define PRINT_SUBDEVS 0x00000002 155#define PRINT_HEADER 0x00000004 156#define PRINT_DEBUG 0x00000008 157#define PRINT_TIMES 0x00000010 158#define PRINT_SETSTAT 0x00000020 159#define PRINT_SETSTAT_ONLY 0x00000040 160#define PRINT_FAST 0x00000080 161#define PRINT_DEVID 0x00000100 162#define PRINT_LARGEDEVICES 0x00000200 163#define PRINT_FN 0x00000400 164 165/* 166 * for meta_devadm options 167 */ 168typedef uint_t mddevopts_t; 169#define DEV_VERBOSE 0x00000001 170#define DEV_NOACTION 0x00000002 171#define DEV_LOG 0x00000004 172#define DEV_RELOAD 0x00000008 173#define DEV_UPDATE 0x00000010 174#define DEV_LOCAL_SET 0x00000020 /* update only MD_LOCAL_SET */ 175 176/* 177 * return values for meta_devadm operations 178 */ 179#define METADEVADM_SUCCESS 0 180#define METADEVADM_ERR 1 181#define METADEVADM_DEVIDINVALID 2 182#define METADEVADM_DSKNAME_ERR 3 183#define METADEVADM_DISKMOVE 4 184 185/* 186 * return values for the splitname function 187 */ 188#define METASPLIT_SUCCESS 0 189#define METASPLIT_LONGPREFIX 1 190#define METASPLIT_LONGDISKNAME 2 191 192/* 193 * meta_check* options 194 */ 195typedef uint_t mdchkopts_t; 196#define MDCHK_ALLOW_MDDB 0x01 /* allows repliica in md's (metainit) */ 197#define MDCHK_ALLOW_HS 0x02 /* allows hs in multiple hsp's (hs) */ 198#define MDCHK_ALLOW_LOG 0x04 /* allows sharing of logs (trans) */ 199#define MDCHK_ALLOW_REPSLICE 0x08 /* allow replica slice to be used */ 200#define MDCHK_ALLOW_NODBS 0x10 /* no db replicas allowed (metadb) */ 201#define MDCHK_DRVINSET 0x20 /* drive is in set (metaset) */ 202#define MDCHK_SET_LOCKED 0x40 /* The set is locked */ 203#define MDCHK_SET_FORCE 0x80 /* This is a forced operation */ 204 205/* 206 * meta_check_inuse options 207 */ 208typedef uint_t mdinuseopts_t; 209#define MDCHK_SWAP 0x01 /* check swap & overlap w/swap */ 210#define MDCHK_DUMP 0x02 /* check dump & overlap w/dump */ 211#define MDCHK_MOUNTED 0x04 /* check mounted & overlap w/mounted */ 212#define MDCHK_INUSE 0xff /* check all */ 213 214/* 215 * meta* force options 216 */ 217typedef uint_t mdforceopts_t; 218#define MDFORCE_NONE 0x01 /* no extra force used */ 219#define MDFORCE_LOCAL 0x02 /* force from metadb command line */ 220#define MDFORCE_DS 0x04 /* force from metaset library */ 221#define MDFORCE_SET_LOCKED 0x10 /* The set is locked */ 222 223 224/* 225 * meta* options 226 */ 227typedef uint_t mdcmdopts_t; 228#define MDCMD_DOIT 0x0001 /* really do operation */ 229#define MDCMD_FORCE 0x0002 /* force operation */ 230#define MDCMD_PRINT 0x0004 /* print success messages to stdout */ 231#define MDCMD_RECURSE 0x0008 /* recursive operation */ 232#define MDCMD_INIT 0x0010 /* init operation */ 233#define MDCMD_UPDATE 0x0020 /* update sizes used w/o DOIT mostly */ 234#define MDCMD_NOLOCK 0x0040 /* lock already held, DONT acquire */ 235#define MDCMD_VERBOSE 0x0100 /* be verbose */ 236#define MDCMD_USE_WHOLE_DISK 0x0200 /* repartition disk */ 237#define MDCMD_DIRECT 0x0400 /* extents specified directly */ 238#define MDCMD_ALLOPTION 0x0800 /* the all option is being used */ 239#define MDCMD_MN_OPEN_CHECK 0x1000 /* Perform open check on all nodes */ 240 241/* 242 * meta_tab* definitions 243 */ 244#define TAB_ARG_ALLOC 5 245#define TAB_LINE_ALLOC 10 246 247typedef uint_t mdinittypes_t; 248#define TAB_UNKNOWN 0x0000 249#define TAB_MDDB 0x0001 250#define TAB_HSP 0x0002 251#define TAB_STRIPE 0x0004 252#define TAB_MIRROR 0x0008 253#define TAB_RAID 0x0010 254#define TAB_TRANS 0x0020 255#define TAB_SP 0x0040 256#define TAB_MD (TAB_STRIPE | TAB_MIRROR | TAB_RAID |\ 257 TAB_TRANS | TAB_SP) 258#define TAB_MD_HSP (TAB_MD | TAB_HSP) 259 260typedef struct { 261 mdinittypes_t type; 262 char *context; 263 char *cname; 264 int argc; 265 char **argv; 266 size_t alloc; 267 uint_t flags; /* for application use */ 268} md_tab_line_t; 269 270typedef struct { 271 char *filename; 272 char *data; 273 size_t total; 274 size_t nlines; 275 md_tab_line_t *lines; 276 size_t alloc; 277} md_tab_t; 278 279/* 280 * disk status definitions 281 */ 282typedef struct md_disk_status_list { 283 struct md_disk_status_list *next; 284 mddrivename_t *drivenamep; 285 md_error_t status; 286} md_disk_status_list_t; 287 288/* 289 * module name list used by meta_patch_root & meta_systemfile 290 */ 291struct modname { 292 char *name; 293 struct modname *next; 294}; 295 296/* 297 * list to be used for printing Device Relocation Information 298 */ 299typedef struct mddevid_t { 300 struct mddevid_t *next; 301 char *ctdname; 302 mdkey_t key; 303} mddevid_t; 304 305/* 306 * Multi-Node Diskset List 307 * 308 * we either store the IP address of the private interconnect or its name 309 * in the msl_node_addr member 310 */ 311typedef struct mndiskset_membershiplist { 312 uint_t msl_node_id; 313 md_mnnode_nm_t msl_node_name; 314 md_mnnode_nm_t msl_node_addr; 315 struct mndiskset_membershiplist *next; 316} mndiskset_membershiplist_t; 317 318/* 319 * client pool for rpc calls to mdcommd 320 */ 321typedef struct md_mn_client_list { 322 CLIENT *mcl_clnt; 323 struct md_mn_client_list *mcl_next; 324} md_mn_client_list_t; 325 326/* 327 * Resync thread manipulation commands. 328 * 329 * The resync thread can now be started, blocked, unblocked or killed. 330 * This typedef specifies the action to be taken by meta_resync.c 331 * routines. 332 */ 333typedef enum { 334 MD_RESYNC_START = 1, 335 MD_RESYNC_BLOCK, 336 MD_RESYNC_UNBLOCK, 337 MD_RESYNC_KILL, 338 MD_RESYNC_KILL_NO_WAIT, 339 MD_RESYNC_FORCE_MNSTART 340} md_resync_cmd_t; 341 342 343/* 344 * rpc.metad macro definitions. 345 */ 346#define METAD_SETUP_DR(cmd, id) \ 347 { \ 348 req.ur_cmd = cmd; \ 349 req.ur_setno = MD_LOCAL_SET; \ 350 req.ur_type = MDDB_USER; \ 351 req.ur_type2 = MDDB_UR_DR; \ 352 req.ur_recid = id; \ 353 } 354 355#define METAD_SETUP_NR(cmd, id) \ 356 { \ 357 req.ur_cmd = cmd; \ 358 req.ur_setno = MD_LOCAL_SET; \ 359 req.ur_type = MDDB_USER; \ 360 req.ur_type2 = MDDB_UR_NR; \ 361 req.ur_recid = id; \ 362 } 363 364#define METAD_SETUP_SR(cmd, id) \ 365 { \ 366 req.ur_cmd = cmd; \ 367 req.ur_setno = MD_LOCAL_SET; \ 368 req.ur_type = MDDB_USER; \ 369 req.ur_type2 = MDDB_UR_SR; \ 370 req.ur_recid = id; \ 371 } 372 373#define METAD_SETUP_UR(cmd, type2, id) \ 374 { \ 375 req.ur_cmd = cmd; \ 376 req.ur_setno = MD_LOCAL_SET; \ 377 req.ur_type = MDDB_USER; \ 378 req.ur_type2 = type2; \ 379 req.ur_recid = id; \ 380 } 381 382#define METAD_SETUP_LR(cmd, setno, id) \ 383 { \ 384 req.ur_cmd = cmd; \ 385 req.ur_setno = setno; \ 386 req.ur_type = MDDB_USER; \ 387 req.ur_type2 = MDDB_UR_LR; \ 388 req.ur_recid = id; \ 389 } 390 391/* 392 * This typedef specifies the signature of a function that 393 * meta_client_create_retry can use to establish an rpc connection. 394 * private is used to pass data from the caller of meta_client_create_retry 395 * to clnt_create_func. 396 */ 397typedef CLIENT *(*clnt_create_func_t)(char *hostname, 398 void *private, 399 struct timeval *time_out); 400 401/* definition of the table for the different message types */ 402typedef struct md_mn_msg_tbl_entry { 403 md_mn_msgclass_t mte_class; 404 void (*mte_handler) 405 (md_mn_msg_t *msg, uint_t flags, md_mn_result_t *res); 406 int (*mte_smgen) 407 (md_mn_msg_t *msg, md_mn_msg_t **msglist); 408 time_t mte_timeout; /* seconds before msg times out */ 409 uint_t mte_retry1; /* nretries in case of class busy */ 410 uint_t mte_ticks1; /* sleep nticks before retry */ 411 uint_t mte_retry2; /* nretries in case of comm fail */ 412 uint_t mte_ticks2; /* sleep nticks before retry */ 413} md_mn_msg_tbl_entry_t; 414 415/* 416 * Flags for the take command 417 */ 418#define TAKE_FORCE 0x0001 419#define TAKE_USETAG 0x0002 420#define TAKE_USEIT 0x0004 421#define TAKE_IMP 0x0008 422#define TAKE_RETAKE 0x0010 423 424/* 425 * ignore gettext for lint so we check printf args 426 */ 427#ifdef __lint 428#define dgettext(d, s) s 429#define gettext(s) s 430#endif 431 432/* 433 * Defines for enabling/disabling SVM services in SMF. 434 */ 435#define META_SMF_CORE 0x01 436#define META_SMF_DISKSET 0x02 437#define META_SMF_MN_DISKSET 0x04 438#define META_SMF_ALL 0xFF 439 440/* 441 * Defines to send/not_send addition of mddb sidenames to 442 * rpc.mdcommd for MN disksets. 443 */ 444#define DB_ADDSIDENMS_NO_BCAST 0 445#define DB_ADDSIDENMS_BCAST 1 446 447/* 448 * Defines and structures to support rpc.mdcommd. 449 * RPC routines in rpc.metad will be used to suspend, resume 450 * and reinitialize the rpc.mdcommd running on that node. 451 * These actions are needed when the nodelist is changing. 452 */ 453#define COMMDCTL_SUSPEND 1 454#define COMMDCTL_RESUME 2 455#define COMMDCTL_REINIT 3 456 457/* 458 * Defines used when joining a node to a MN diskset. 459 * A MN diskset is stale if < 50% mddbs are available when the first node 460 * joins the set. A MN diskset is stale when 50% mddbs are available when 461 * the first node joins the set if the mediator is unable to provide an 462 * extra vote. 463 * Once a MN set is marked stale, it stays in the stale state (even if > 50% 464 * mddbs are available) until all nodes are withdrawn from the diskset. 465 * Any new nodes joining a stale MN diskset are marked stale regardless of 466 * the availability of mddbs in order to keep the diskset consistent across 467 * all nodes. 468 * 469 * If a reconfig cycle is underway, set the reconfig flag so that rpc.metad 470 * clnt_locks are not enforced. Since the reconfig cycle has locked out the 471 * meta* commands, this is safe to do. 472 */ 473#define MNSET_IS_STALE 1 /* Is MN set stale? */ 474#define MNSET_IN_RECONFIG 2 /* Is MN set in reconfig? */ 475 476/* 477 * Structure used during reconfig step2 to aid in sychronization 478 * of the drives in a diskset. 479 */ 480typedef struct md_mnsr_node { 481 md_mnset_record *mmn_mnsr; 482 md_mnnode_nm_t mmn_nodename; 483 int mmn_numdrives; 484 md_drive_desc *mmn_dd; 485 struct md_mnsr_node *mmn_next; 486} md_mnsr_node_t; 487 488 489/* 490 * meta events definitions ("meta_notify.h") 491 */ 492 493/* 494 * event flags 495 * meta_notify_createq(), (EXISTERR, PERMANENT) 496 * meta_notify_getev(), (WAIT) 497 * meta_notify_getevlist() (WAIT) 498 */ 499#define EVFLG_WAIT 0x00000001 /* block until events are pending */ 500#define EVFLG_EXISTERR 0x00000002 /* if q exists, return an error */ 501#define EVFLG_PERMANENT 0x00000004 /* queue persists after process exit */ 502 503/* 504 * events are always associated with an underlying object 505 * This object is of one of the following types. 506 */ 507typedef enum md_ev_objtype_t { 508 EVO_EMPTY = 0, 509 EVO_METADEV, 510 EVO_MIRROR, 511 EVO_STRIPE, 512 EVO_RAID5, 513 EVO_TRANS, 514 EVO_REPLICA, 515 EVO_HSP, 516 EVO_HS, 517 EVO_SET, 518 EVO_DRIVE, 519 EVO_HOST, 520 EVO_MEDIATOR, 521 EVO_UNSPECIFIED, 522 EVO_LAST 523} ev_obj_t; 524 525/* 526 * Specific events are sent upon state changes 527 * in the underlying devices or when sent by 528 * user applications. These events have a unique 529 * type. These types map to kernel event types (sys/md_notify.h) 530 * 531 * When updating these UPDATE THE TABLE in lib/config/config.c 532 */ 533typedef enum md_ev_id_t { 534 EV_UNK = 0, 535 EV_EMPTY, 536 EV_CREATE, 537 EV_DELETE, 538 EV_ADD, 539 EV_REMOVE, 540 EV_REPLACE, 541 EV_GROW, 542 EV_RENAME_SRC, 543 EV_RENAME_DST, 544 EV_MEDIATOR_ADD, 545 EV_MEDIATOR_DELETE, 546 EV_HOST_ADD, 547 EV_HOST_DELETE, 548 EV_DRIVE_ADD, 549 EV_DRIVE_DELETE, 550 EV_INIT_START, 551 EV_INIT_FAILED, 552 EV_INIT_FATAL, 553 EV_INIT_SUCCESS, 554 EV_IOERR, 555 EV_ERRED, 556 EV_LASTERRED, 557 EV_OK, 558 EV_ENABLE, 559 EV_RESYNC_START, 560 EV_RESYNC_FAILED, 561 EV_RESYNC_SUCCESS, 562 EV_RESYNC_DONE, 563 EV_HOTSPARED, 564 EV_HS_FREED, 565 EV_HS_CHANGED, 566 EV_TAKEOVER, 567 EV_RELEASE, 568 EV_OPEN_FAIL, 569 EV_OFFLINE, 570 EV_ONLINE, 571 EV_GROW_PENDING, 572 EV_DETACH, 573 EV_DETACHING, 574 EV_ATTACH, 575 EV_ATTACHING, 576 EV_CHANGE, 577 EV_EXCHANGE, 578 EV_REGEN_START, 579 EV_REGEN_DONE, 580 EV_REGEN_FAILED, 581 EV_USER, 582 EV_NOTIFY_LOST, 583 EV_LAST 584} evid_t; 585 586#define EV_ALLOBJS (~0ULL) 587#define EV_ALLSETS ((set_t)(~0)) 588 589#if !defined(_KERNEL) 590 591#define NOTIFY_MD(tag, set, dev, ev) \ 592 (void) meta_notify_sendev((tag), (set), (dev), (ev)) 593 594#define SE_NOTIFY(se_class, se_subclass, tag, set, dev) \ 595 meta_svm_sysevent((se_class), (se_subclass), (tag), (set), (dev)) 596 597#endif /* _KERNEL */ 598 599typedef struct md_ev { 600 ev_obj_t obj_type; 601 set_t setno; 602 evid_t ev; 603 u_longlong_t obj; /* usually md_dev64_t or hsp id */ 604 u_longlong_t uev; /* for (EV_USER) user-defined events */ 605} md_ev_t; 606 607typedef struct md_evlist { 608 struct md_evlist *next; 609 md_ev_t *evp; 610} md_evlist_t; 611 612/* end of meta event definitions ("meta_notify.h") */ 613 614typedef struct md_im_names { 615 int min_count; 616 char **min_names; 617} md_im_names_t; 618 619/* Values for replica info status */ 620#define MD_IM_REPLICA_SCANNED (0x01) 621#define MD_IM_REPLICA_VALID (0x02) 622 623typedef struct md_im_replica_info { 624 struct md_im_replica_info *mir_next; 625 int mir_status; 626 int mir_flags; 627 daddr32_t mir_offset; 628 daddr32_t mir_length; 629 md_timeval32_t mir_timestamp; 630} md_im_replica_info_t; 631 632typedef struct md_im_drive_info { 633 struct md_im_drive_info *mid_next; /* next drive in this set */ 634 mddrivename_t *mid_dnp; 635 void *mid_devid; 636 void *mid_o_devid; 637 int mid_devid_sz; 638 int mid_o_devid_sz; 639 char mid_minor_name[MDDB_MINOR_NAME_MAX]; 640 minor_t mid_mnum; 641 int mid_available; 642 md_timeval32_t mid_setcreatetimestamp; 643 char *mid_driver_name; 644 char *mid_devname; 645 md_im_replica_info_t *mid_replicas; 646 int overlapped_disk; 647 struct md_im_drive_info *overlap; /* chain of overlap disks */ 648} md_im_drive_info_t; 649 650/* Values for mid_available */ 651#define MD_IM_DISK_AVAILABLE 0x00 652#define MD_IM_DISK_NOT_AVAILABLE 0x01 653 654/* Values for set descriptor flags */ 655#define MD_IM_SET_INVALID 0x10 656#define MD_IM_SET_REPLICATED 0x20 657 658/* Values for mis_partial */ 659#define MD_IM_COMPLETE_DISKSET 0x04 660#define MD_IM_PARTIAL_DISKSET 0x08 661 662typedef struct md_im_set_desc { 663 struct md_im_set_desc *mis_next; 664 int mis_flags; 665 int mis_oldsetno; 666 md_im_drive_info_t *mis_drives; 667 int mis_active_replicas; 668 int mis_partial; 669} md_im_set_desc_t; 670 671/* meta_admin.c */ 672extern int open_admin(md_error_t *ep); 673extern int close_admin(md_error_t *ep); 674extern int meta_dev_ismeta(md_dev64_t dev); 675extern int meta_get_nunits(md_error_t *ep); 676extern md_dev64_t metamakedev(minor_t mnum); 677 678/* meta_attach.c */ 679extern int meta_concat_generic(mdsetname_t *sp, mdname_t *namep, 680 u_longlong_t big_or_little, md_error_t *ep); 681extern int meta_concat_parent(mdsetname_t *sp, mdname_t *childnp, 682 md_error_t *ep); 683 684/* meta_check.c */ 685extern int meta_check_inuse(mdsetname_t *sp, mdname_t *np, 686 mdinuseopts_t inuse_flag, md_error_t *ep); 687extern int meta_check_driveinset(mdsetname_t *sp, 688 mddrivename_t *dnp, md_error_t *ep); 689extern int meta_check_drivemounted(mdsetname_t *sp, 690 mddrivename_t *dnp, md_error_t *ep); 691extern int meta_check_driveswapped(mdsetname_t *sp, 692 mddrivename_t *dnp, md_error_t *ep); 693extern int meta_check_samedrive(mdname_t *np1, mdname_t *np2, 694 md_error_t *ep); 695extern int meta_check_overlap(char *uname, mdname_t *np1, 696 diskaddr_t slblk1, diskaddr_t nblks1, mdname_t *np2, 697 diskaddr_t slblk2, diskaddr_t nblks2, 698 md_error_t *ep); 699extern int meta_check_inmeta(mdsetname_t *sp, mdname_t *np, 700 mdchkopts_t options, diskaddr_t slblk, 701 diskaddr_t nblks, 702 md_error_t *ep); 703extern int meta_check_inset(mdsetname_t *sp, mdname_t *np, 704 md_error_t *ep); 705extern int meta_check_root(md_error_t *ep); 706 707 708/* meta_db.c */ 709extern char *meta_devid_encode_str(ddi_devid_t devid, 710 char *minor_name); 711extern void meta_devid_encode_str_free(char *devidstr); 712extern int meta_devid_decode_str(char *devidstr, 713 ddi_devid_t *devidp, char **minor_namep); 714extern int meta_check_inreplica(mdsetname_t *sp, mdname_t *np, 715 diskaddr_t slblk, diskaddr_t nblks, md_error_t *ep); 716extern int meta_check_replica(mdsetname_t *sp, mdname_t *np, 717 mdchkopts_t options, diskaddr_t slblk, 718 diskaddr_t nblks, md_error_t *ep); 719extern int meta_db_addsidenms(mdsetname_t *sp, mdname_t *np, 720 daddr_t blkno, int bcast, md_error_t *ep); 721extern int meta_db_delsidenm(mdsetname_t *sp, side_t sideno, 722 mdname_t *np, daddr_t blkno, md_error_t *ep); 723extern int meta_db_patch(char *sname, char *cname, int patch, 724 md_error_t *ep); 725extern int meta_db_attach(mdsetname_t *sp, mdnamelist_t *db_nlp, 726 mdchkopts_t options, md_timeval32_t *timeval, 727 int dbcnt, int dbsize, char *sysfilename, 728 md_error_t *ep); 729extern int meta_db_detach(mdsetname_t *sp, mdnamelist_t *db_nlp, 730 mdforceopts_t force, char *sysfilename, 731 md_error_t *ep); 732extern void metafreereplicalist(md_replicalist_t *rlp); 733extern int metareplicalist(mdsetname_t *sp, int flags, 734 md_replicalist_t **rlpp, md_error_t *ep); 735extern void meta_sync_db_locations(mdsetname_t *sp, 736 md_error_t *ep); 737extern int meta_setup_db_locations(md_error_t *ep); 738extern daddr_t meta_db_minreplica(mdsetname_t *sp, md_error_t *ep); 739extern int meta_get_replica_names(mdsetname_t *, 740 mdnamelist_t **, int options, md_error_t *); 741extern void meta_mkdummymaster(mdsetname_t *sp, int fd, 742 daddr_t firstblk); 743extern md_timeval32_t meta_get_lb_inittime(mdsetname_t *sp, md_error_t *ep); 744 745/* meta_db_balance.c */ 746extern int meta_db_balance(mdsetname_t *sp, md_drive_desc *opdd, 747 md_drive_desc *curdd, daddr_t dbsize, 748 md_error_t *ep); 749 750/* metadevstamp.c */ 751extern int getdevstamp(mddrivename_t *dnp, time_t *stamp, 752 md_error_t *ep); 753extern int setdevstamp(mddrivename_t *dnp, time_t *stamp, 754 md_error_t *ep); 755 756/* meta_error.c */ 757extern int metaioctl(int cmd, void *data, md_error_t *ep, 758 char *name); 759extern void md_logpfx(FILE *fp); 760/* PRINTFLIKE2 */ 761extern char *mde_sperror(md_error_t *mdep, const char *fmt, ...); 762/* PRINTFLIKE2 */ 763extern void mde_perror(md_error_t *mdep, const char *fmt, ...); 764/* PRINTFLIKE1 */ 765extern void md_perror(const char *fmt, ...); 766/* PRINTFLIKE1 */ 767extern void md_eprintf(const char *fmt, ...); 768extern void meta_mc_log(int level, const char *fmt, ...); 769 770/* meta_getdevs.c */ 771extern minor_t meta_getminor(md_dev64_t dev64); 772extern major_t meta_getmajor(md_dev64_t dev64); 773extern md_dev64_t meta_expldev(md_dev64_t dev); 774extern dev32_t meta_cmpldev(md_dev64_t dev64); 775 776extern int meta_fix_compnames(mdsetname_t *sp, 777 mdname_t *namep, md_dev64_t dev, md_error_t *ep); 778extern int meta_getdevs(mdsetname_t *sp, mdname_t *namep, 779 mdnamelist_t **nlpp, md_error_t *ep); 780extern int meta_getalldevs(mdsetname_t *sp, mdnamelist_t **nlpp, 781 int check_db, md_error_t *ep); 782extern int meta_getvtoc(int fd, char *devname, 783 struct extvtoc *vtocbufp, int *partno, 784 md_error_t *ep); 785extern int meta_setvtoc(int fd, char *devname, 786 struct extvtoc *vtocbufp, md_error_t *ep); 787extern int meta_setmdvtoc(int fd, char *devname, 788 mdvtoc_t *mdvtocbufp, md_error_t *ep); 789extern int meta_get_names(char *drivername, mdsetname_t *sp, 790 mdnamelist_t **nlpp, mdprtopts_t options, 791 md_error_t *ep); 792extern int meta_deviceid_to_nmlist(char *search_path, 793 ddi_devid_t devid, char *minor_name, 794 devid_nmlist_t **retlist); 795 796/* meta_hotspares.c */ 797extern int meta_get_hsp_names(mdsetname_t *sp, 798 mdhspnamelist_t **hspnlpp, int options, 799 md_error_t *ep); 800extern void meta_free_hsp(md_hsp_t *hspp); 801extern void meta_invalidate_hsp(mdhspname_t *hspnp); 802extern md_hsp_t *meta_get_hsp(mdsetname_t *sp, mdhspname_t *hspnp, 803 md_error_t *ep); 804extern md_hsp_t *meta_get_hsp_common(mdsetname_t *sp, 805 mdhspname_t *hspnp, int fast, md_error_t *ep); 806extern int meta_check_inhsp(mdsetname_t *sp, mdname_t *np, 807 diskaddr_t slblk, diskaddr_t nblks, md_error_t *ep); 808extern int meta_check_hotspare(mdsetname_t *sp, mdname_t *np, 809 md_error_t *ep); 810extern char *hs_state_to_name(md_hs_t *hsp, 811 md_timeval32_t *tvp); 812extern int meta_hsp_print(mdsetname_t *sp, mdhspname_t *hspnp, 813 mdnamelist_t **nlpp, char *fname, FILE *fp, 814 mdprtopts_t options, md_error_t *ep); 815extern int metachkhsp(mdsetname_t *sp, mdhspname_t *hspnp, 816 md_error_t *ep); 817extern int meta_hs_add(mdsetname_t *sp, mdhspname_t *hspnp, 818 mdnamelist_t *nlp, mdcmdopts_t options, 819 md_error_t *ep); 820extern int meta_hs_delete(mdsetname_t *sp, mdhspname_t *hspnp, 821 mdnamelist_t *nlp, mdcmdopts_t options, 822 md_error_t *ep); 823extern int meta_hs_replace(mdsetname_t *sp, mdhspname_t *hspnp, 824 mdname_t *oldnp, mdname_t *newnp, 825 mdcmdopts_t options, md_error_t *ep); 826extern int meta_hs_enable(mdsetname_t *sp, mdnamelist_t *nlp, 827 mdcmdopts_t options, md_error_t *ep); 828extern int meta_check_hsp(mdsetname_t *sp, md_hsp_t *hspp, 829 mdcmdopts_t options, md_error_t *ep); 830extern int meta_create_hsp(mdsetname_t *sp, md_hsp_t *hspp, 831 mdcmdopts_t options, md_error_t *ep); 832extern int meta_init_hsp(mdsetname_t **spp, 833 int argc, char *argv[], mdcmdopts_t options, 834 md_error_t *ep); 835extern int meta_hsp_reset(mdsetname_t *sp, mdhspname_t *hspnp, 836 mdcmdopts_t options, md_error_t *ep); 837 838/* meta_init.c */ 839extern int parse_interlace(char *uname, char *name, 840 diskaddr_t *interlacep, md_error_t *ep); 841extern int meta_cook_syntax(md_error_t *ep, 842 md_void_errno_t errcode, char *uname, 843 int argc, char *argv[]); 844extern int meta_setup_geom(md_unit_t *md, mdname_t *np, 845 mdgeom_t *geomp, uint_t write_reinstruct, 846 uint_t read_reinstruct, uint_t round_cyl, 847 md_error_t *ep); 848extern int meta_adjust_geom(md_unit_t *md, mdname_t *np, 849 uint_t write_reinstruct, uint_t read_reinstruct, 850 uint_t round_cyl, md_error_t *ep); 851extern int meta_init_name(mdsetname_t **spp, int argc, 852 char *argv[], char *cname, mdcmdopts_t options, 853 md_error_t *ep); 854extern int meta_check_devicesize(diskaddr_t total_blocks); 855extern int meta_init_make_device(mdsetname_t **spp, char *uname, 856 md_error_t *ep); 857extern mdinittypes_t meta_get_init_type(int argc, char *argv[]); 858 859/* meta_mdcf.c */ 860extern int meta_update_md_cf(mdsetname_t *sp, md_error_t *ep); 861 862/* meta_med.c */ 863extern int meddstealerror(md_error_t *ep, med_err_t *medep); 864extern int clnt_med_null(char *hostname, md_error_t *ep); 865extern int clnt_med_upd_data(md_h_t *mdhp, mdsetname_t *sp, 866 med_data_t *meddp, md_error_t *ep); 867extern int clnt_med_get_data(md_h_t *mdhp, mdsetname_t *sp, 868 med_data_t *meddp, md_error_t *ep); 869extern int clnt_med_get_rec(md_h_t *mdhp, mdsetname_t *sp, 870 med_rec_t *medrp, md_error_t *ep); 871extern int clnt_med_upd_rec(md_h_t *mdhp, mdsetname_t *sp, 872 med_rec_t *medrp, md_error_t *ep); 873extern int clnt_med_hostname(char *hostname, char **ret_hostname, 874 md_error_t *ep); 875extern int clnt_user_med_upd_data(md_h_t *mdhp, bool_t obandiskset, 876 char *setname, uint_t setnum, med_data_t *meddp, 877 md_error_t *ep); 878extern int clnt_user_med_get_data(md_h_t *mdhp, bool_t obandiskset, 879 char *setname, uint_t setnum, med_data_t *meddp, 880 md_error_t *ep); 881 882extern int meta_med_hnm2ip(md_hi_arr_t *mp, md_error_t *ep); 883extern int meta_h2hi(md_h_arr_t *mdhp, md_hi_arr_t *mdhip, 884 md_error_t *ep); 885extern int meta_hi2h(md_hi_arr_t *mdhip, md_h_arr_t *mdhp, 886 md_error_t *ep); 887extern int setup_med_cfg(mdsetname_t *sp, mddb_config_t *cp, 888 int force, md_error_t *ep); 889extern int meta_mediator_info_from_file(char *sname, int verbose, 890 md_error_t *ep); 891 892/* meta_mem.c */ 893#ifdef _DEBUG_MALLOC_INC 894extern void *_Malloc(char *file, int line, size_t s); 895extern void *_Zalloc(char *file, int line, size_t s); 896extern void *_Realloc(char *file, int line, void *p, size_t s); 897extern void *_Calloc(char *file, int line, size_t n, size_t s); 898extern char *_Strdup(char *file, int line, char *p); 899extern void _Free(char *file, int line, void *p); 900#define Malloc(s) _Malloc(__FILE__, __LINE__, (s)) 901#define Zalloc(s) _Zalloc(__FILE__, __LINE__, (s)) 902#define Realloc(p, s) _Realloc(__FILE__, __LINE__, (p), (s)) 903#define Calloc(n, s) _Calloc(__FILE__, __LINE__, (n), (s)) 904#define Strdup(p) _Strdup(__FILE__, __LINE__, (p)) 905#define Free(p) _Free(__FILE__, __LINE__, (p)) 906#else /* ! _DEBUG_MALLOC_INC */ 907extern void *Malloc(size_t s); 908extern void *Zalloc(size_t s); 909extern void *Realloc(void *p, size_t s); 910extern void *Calloc(size_t n, size_t s); 911extern char *Strdup(char *p); 912extern void Free(void *p); 913#endif /* ! _DEBUG_MALLOC_INC */ 914 915/* meta_metad.c */ 916extern int clnt_adddrvs(char *hostname, mdsetname_t *sp, 917 md_drive_desc *dd, md_timeval32_t timestamp, 918 ulong_t genid, md_error_t *ep); 919extern int clnt_addhosts(char *hostname, mdsetname_t *sp, 920 int node_c, char **node_v, md_error_t *ep); 921extern int clnt_update_namespace(char *hostname, mdsetname_t *sp, 922 side_t side, mddrivename_t *dnp, char *newname, 923 md_error_t *ep); 924extern int clnt_add_drv_sidenms(char *hostname, char *this_host, 925 mdsetname_t *sp, md_set_desc *sd, int node_c, 926 char **node_v, md_error_t *ep); 927extern int clnt_createset(char *hostname, mdsetname_t *sp, 928 md_node_nm_arr_t nodes, md_timeval32_t timestamp, 929 ulong_t genid, md_error_t *ep); 930extern int clnt_mncreateset(char *hostname, mdsetname_t *sp, 931 md_mnnode_desc *nodelist, md_timeval32_t timestamp, 932 ulong_t genid, md_node_nm_t master_nodenm, 933 int master_nodeid, md_error_t *ep); 934extern int clnt_joinset(char *hostname, mdsetname_t *sp, 935 int flags, md_error_t *ep); 936extern int clnt_withdrawset(char *hostname, mdsetname_t *sp, 937 md_error_t *ep); 938extern int clnt_deldrvs_by_devid(char *hostname, mdsetname_t *sp, 939 md_drive_desc *dd, md_error_t *ep); 940extern int clnt_deldrvs(char *hostname, mdsetname_t *sp, 941 md_drive_desc *dd, md_error_t *ep); 942extern int clnt_delhosts(char *hostname, mdsetname_t *sp, 943 int node_c, char **node_v, md_error_t *ep); 944extern int clnt_delset(char *hostname, mdsetname_t *sp, 945 md_error_t *ep); 946extern int clnt_del_drv_sidenms(char *hostname, mdsetname_t *sp, 947 md_error_t *ep); 948extern int clnt_devinfo(char *hostname, mdsetname_t *sp, 949 mddrivename_t *dp, md_dev64_t *ret_dev, 950 time_t *ret_timestamp, md_error_t *ep); 951extern int clnt_devid(char *hostname, mdsetname_t *sp, 952 mddrivename_t *dp, char **ret_encdevid, 953 md_error_t *ep); 954extern int clnt_devinfo_by_devid(char *hostname, mdsetname_t *sp, 955 char *devidstr, md_dev64_t *retdev, 956 char *orig_devname, char **ret_devname, 957 char **ret_driver, md_error_t *ep); 958extern int clnt_drvused(char *hostname, mdsetname_t *sp, 959 mddrivename_t *dp, md_error_t *ep); 960extern void free_sr(md_set_record *sr); 961extern int clnt_getset(char *hostname, char *setname, set_t setno, 962 md_set_record **sr, md_error_t *ep); 963extern int clnt_mngetset(char *hostname, char *setname, 964 set_t setno, md_mnset_record **mnsr, 965 md_error_t *ep); 966extern int clnt_hostname(char *hostname, char **ret_hostname, 967 md_error_t *ep); 968extern int clnt_nullproc(char *hostname, md_error_t *ep); 969extern int clnt_ownset(char *hostname, mdsetname_t *sp, 970 int *ret_bool, md_error_t *ep); 971extern int clnt_setnameok(char *hostname, mdsetname_t *sp, 972 int *ret_bool, md_error_t *ep); 973extern int clnt_setnumbusy(char *hostname, set_t setno, 974 int *ret_bool, md_error_t *ep); 975extern int clnt_upd_dr_dbinfo(char *hostname, mdsetname_t *sp, 976 md_drive_desc *dd, md_error_t *ep); 977extern int clnt_stimeout(char *hostname, mdsetname_t *sp, 978 mhd_mhiargs_t *mhiargsp, md_error_t *ep); 979extern int clnt_gtimeout(char *hostname, mdsetname_t *sp, 980 mhd_mhiargs_t *ret_mhiargs, md_error_t *ep); 981extern int clnt_upd_dr_flags(char *hostname, mdsetname_t *sp, 982 md_drive_desc *dd, uint_t new_flags, 983 md_error_t *ep); 984extern int clnt_enable_sr_flags(char *hostname, mdsetname_t *sp, 985 uint_t new_flags, md_error_t *ep); 986extern int clnt_disable_sr_flags(char *hostname, mdsetname_t *sp, 987 uint_t new_flags, md_error_t *ep); 988extern int clnt_upd_sr_flags(char *hostname, mdsetname_t *sp, 989 uint_t new_flags, md_error_t *ep); 990extern int clnt_upd_nr_flags(char *hostname, mdsetname_t *sp, 991 md_mnnode_desc *nd, uint_t flag_action, 992 uint_t flags, md_error_t *ep); 993extern int clnt_unlock_set(char *hostname, md_setkey_t *cl_sk, 994 md_error_t *ep); 995extern int clnt_lock_set(char *hostname, mdsetname_t *sp, 996 md_error_t *ep); 997extern int clnt_updmeds(char *hostname, mdsetname_t *sp, 998 md_h_arr_t *meddp, md_error_t *ep); 999extern int clnt_resnarf_set(char *hostname, set_t setno, 1000 md_error_t *ep); 1001extern md_setkey_t *cl_get_setkey(set_t setno, char *setname); 1002extern void cl_set_setkey(md_setkey_t *cl_sk); 1003extern void meta_conv_drvname_new2old(o_mddrivename_t *, 1004 mddrivename_t *); 1005extern void meta_conv_drvname_old2new(o_mddrivename_t *, 1006 mddrivename_t *); 1007extern void meta_conv_drvdesc_new2old(o_md_drive_desc *, 1008 md_drive_desc *); 1009extern void meta_conv_drvdesc_old2new(o_md_drive_desc *, 1010 md_drive_desc *); 1011extern void alloc_olddrvdesc(o_md_drive_desc **, md_drive_desc *); 1012extern void alloc_newdrvdesc(o_md_drive_desc *, md_drive_desc **); 1013extern void free_olddrvdesc(o_md_drive_desc *); 1014extern void free_newdrvdesc(md_drive_desc *); 1015extern char *meta_get_devid(char *); 1016extern int clnt_mnsetmaster(char *hostname, mdsetname_t *sp, 1017 md_node_nm_t master_nodenm, int master_nodeid, 1018 md_error_t *ep); 1019extern int clnt_clr_mnsetlock(char *hostname, md_error_t *ep); 1020extern int clnt_mdcommdctl(char *hostname, int flag_action, 1021 mdsetname_t *sp, md_mn_msgclass_t class, 1022 uint_t flags, md_error_t *ep); 1023extern int clnt_mn_is_stale(char *hostname, mdsetname_t *sp, 1024 int *ret_bool, md_error_t *ep); 1025extern int clnt_getdrivedesc(char *hostname, mdsetname_t *sp, 1026 md_drive_desc **dd, md_error_t *ep); 1027extern void free_rem_dd(md_drive_desc *dd); 1028extern int clnt_upd_dr_reconfig(char *hostname, mdsetname_t *sp, 1029 md_drive_desc *dd, md_error_t *ep); 1030extern int clnt_reset_mirror_owner(char *hostname, mdsetname_t *sp, 1031 int node_c, int *node_id, md_error_t *ep); 1032extern int clnt_mn_susp_res_io(char *hostname, set_t setno, 1033 int flag, md_error_t *ep); 1034extern int clnt_mn_mirror_resync_all(char *hostname, set_t setno, 1035 md_error_t *ep); 1036extern int clnt_mn_sp_update_abr(char *hostname, set_t setno, 1037 md_error_t *ep); 1038 1039/* meta_metad_subr.c */ 1040extern mddb_userreq_t *get_db_rec(md_ur_get_cmd_t cmd, set_t setno, 1041 mddb_type_t type, uint_t type2, mddb_recid_t *idp, 1042 md_error_t *ep); 1043extern void *get_ur_rec(set_t setno, md_ur_get_cmd_t cmd, 1044 uint_t type2, mddb_recid_t *idp, md_error_t *ep); 1045extern void sr_validate(void); 1046extern void sr_del_drv(md_set_record *sr, mddb_recid_t recid); 1047extern int set_snarf(md_error_t *ep); 1048extern void sr_cache_add(md_set_record *sr); 1049extern void sr_cache_del(mddb_recid_t recid); 1050extern void dr_cache_add(md_set_record *sr, md_drive_record *dr); 1051extern void dr_cache_del(md_set_record *sr, mddb_recid_t recid); 1052extern void mnnr_cache_add(md_mnset_record *sr, 1053 md_mnnode_record *nr); 1054extern void mnnr_cache_del(md_mnset_record *sr, mddb_recid_t recid); 1055extern int metad_isautotakebyname(char *setname); 1056extern int metad_isautotakebynum(set_t setno); 1057extern md_set_record *metad_getsetbyname(char *setname, md_error_t *ep); 1058extern md_set_record *metad_getsetbynum(set_t setno, md_error_t *ep); 1059extern void commitset(md_set_record *sr, int inc_genid, 1060 md_error_t *ep); 1061extern md_set_record *setdup(md_set_record *sr); 1062extern md_mnset_record *mnsetdup(md_mnset_record *mnsr); 1063extern md_drive_record *drdup(md_drive_record *dr); 1064extern md_mnnode_record *nrdup(md_mnnode_record *nr); 1065extern md_drive_desc *dd_list_dup(md_drive_desc *dd); 1066extern void sr_cache_flush(int flushnames); 1067extern void sr_cache_flush_setno(set_t setno); 1068extern void s_delset(char *setname, md_error_t *ep); 1069extern void s_delrec(mddb_recid_t recid, md_error_t *ep); 1070extern int s_ownset(set_t setno, md_error_t *ep); 1071extern int resnarf_set(set_t setno, md_error_t *ep); 1072 1073/* meta_mh.c */ 1074extern mhd_mhiargs_t defmhiargs; 1075extern int meta_take_own(char *sname, mddrivenamelist_t *dnlp, 1076 mhd_mhiargs_t *mhiargsp, int partial_set, 1077 md_error_t *ep); 1078extern int tk_own_bydd(mdsetname_t *sp, md_drive_desc *dd, 1079 mhd_mhiargs_t *mhiargsp, int partial_set, 1080 md_error_t *ep); 1081extern int meta_rel_own(char *sname, mddrivenamelist_t *dnlp, 1082 int partial_set, md_error_t *ep); 1083extern int rel_own_bydd(mdsetname_t *sp, md_drive_desc *dd, 1084 int partial_set, md_error_t *ep); 1085extern int meta_status_own(char *sname, 1086 md_disk_status_list_t *dslp, int partial_set, 1087 md_error_t *ep); 1088extern md_disk_status_list_t *meta_drive_to_disk_status_list( 1089 mddrivenamelist_t *dnlp); 1090extern void meta_free_disk_status_list(md_disk_status_list_t *dslp); 1091extern void meta_free_drive_info_list(mhd_drive_info_list_t *listp); 1092extern int meta_list_drives(char *hostname, char *path, 1093 mhd_did_flags_t flags, 1094 mhd_drive_info_list_t *listp, md_error_t *ep); 1095extern int meta_get_drive_names(mdsetname_t *sp, 1096 mddrivenamelist_t **dnlpp, int options, 1097 md_error_t *ep); 1098 1099/* meta_mirror.c */ 1100extern int meta_get_mirror_names(mdsetname_t *sp, 1101 mdnamelist_t **nlpp, int options, md_error_t *ep); 1102extern void meta_free_mirror(md_mirror_t *mirrorp); 1103extern md_mirror_t *meta_get_mirror(mdsetname_t *sp, mdname_t *mirnp, 1104 md_error_t *ep); 1105extern int meta_check_inmirror(mdsetname_t *sp, mdname_t *np, 1106 diskaddr_t slblk, diskaddr_t nblks, md_error_t *ep); 1107extern int meta_check_submirror(mdsetname_t *sp, mdname_t *np, 1108 mdname_t *mirnp, int force, md_error_t *ep); 1109extern char *rd_opt_to_name(mm_rd_opt_t opt); 1110extern int name_to_rd_opt(char *uname, char *name, 1111 mm_rd_opt_t *optp, md_error_t *ep); 1112extern char *wr_opt_to_name(mm_wr_opt_t opt); 1113extern int name_to_wr_opt(char *uname, char *name, 1114 mm_wr_opt_t *optp, md_error_t *ep); 1115extern int name_to_pass_num(char *uname, char *name, 1116 mm_pass_num_t *passp, md_error_t *ep); 1117extern char *sm_state_to_name(md_submirror_t *mdsp, 1118 md_status_t mirror_status, md_timeval32_t *tvp, 1119 uint_t tstate); 1120extern int sm_state_to_action(mdsetname_t *sp, 1121 md_submirror_t *mdsp, md_status_t mirror_status, 1122 md_mirror_t *mirrorp, char **actionp, 1123 md_error_t *ep); 1124extern int meta_print_mirror_options(mm_rd_opt_t read_options, 1125 mm_wr_opt_t write_option, mm_pass_num_t pass_num, 1126 uint_t tstate, char *fname, 1127 mdsetname_t *sp, FILE *fp, md_error_t *ep); 1128extern int meta_mirror_print(mdsetname_t *sp, mdname_t *mirnp, 1129 mdnamelist_t **nlpp, char *fname, FILE *fp, 1130 mdprtopts_t options, md_error_t *ep); 1131extern int meta_mirror_online(mdsetname_t *sp, mdname_t *mirnp, 1132 mdname_t *submirnp, mdcmdopts_t options, 1133 md_error_t *ep); 1134extern int meta_mirror_offline(mdsetname_t *sp, mdname_t *mirnp, 1135 mdname_t *submirnp, mdcmdopts_t options, 1136 md_error_t *ep); 1137extern int meta_mirror_attach(mdsetname_t *sp, mdname_t *mirnp, 1138 mdname_t *submirnp, mdcmdopts_t options, 1139 md_error_t *ep); 1140extern int meta_mirror_detach(mdsetname_t *sp, mdname_t *mirnp, 1141 mdname_t *submirnp, mdcmdopts_t options, 1142 md_error_t *ep); 1143extern int meta_mirror_get_params(mdsetname_t *sp, 1144 mdname_t *mirnp, mm_params_t *paramsp, 1145 md_error_t *ep); 1146extern int meta_mirror_set_params(mdsetname_t *sp, 1147 mdname_t *mirnp, mm_params_t *paramsp, 1148 md_error_t *ep); 1149extern int meta_mirror_replace(mdsetname_t *sp, mdname_t *mirnp, 1150 mdname_t *oldnp, mdname_t *newnp, 1151 mdcmdopts_t options, md_error_t *ep); 1152extern int meta_mirror_enable(mdsetname_t *sp, mdname_t *mirnp, 1153 mdname_t *compnp, mdcmdopts_t options, 1154 md_error_t *ep); 1155extern int meta_check_mirror(mdsetname_t *sp, 1156 md_mirror_t *mirrorp, mdcmdopts_t options, 1157 md_error_t *ep); 1158extern int meta_create_mirror(mdsetname_t *sp, 1159 md_mirror_t *mirrorp, mdcmdopts_t options, 1160 md_error_t *ep); 1161extern int meta_init_mirror(mdsetname_t **spp, 1162 int argc, char *argv[], mdcmdopts_t options, 1163 md_error_t *ep); 1164extern int meta_mirror_reset(mdsetname_t *sp, mdname_t *mirnp, 1165 mdcmdopts_t options, md_error_t *ep); 1166extern int meta_mirror_anycomp_is_err(mdsetname_t *, 1167 mdnamelist_t *); 1168 1169/* meta_mirror_resync.c */ 1170extern int meta_mirror_resync(mdsetname_t *sp, mdname_t *mirnp, 1171 daddr_t size, md_error_t *ep, md_resync_cmd_t cmd); 1172extern int meta_mirror_resync_all(mdsetname_t *sp, daddr_t size, 1173 md_error_t *ep); 1174extern void *meta_mn_mirror_resync_all(void *arg); 1175extern void meta_mirror_resync_kill_all(void); 1176extern void meta_mirror_resync_block_all(void); 1177extern void meta_mirror_resync_unblock_all(void); 1178extern void meta_mirror_resync_unblock(mdsetname_t *sp); 1179extern void meta_mirror_resync_kill(mdsetname_t *sp); 1180 1181/* meta_mount.c */ 1182extern char *meta_get_mountp(mdsetname_t *, mdname_t *, 1183 md_error_t *); 1184 1185/* meta_name.c */ 1186extern char *meta_name_getname(mdsetname_t **spp, char *uname, 1187 meta_device_type_t uname_type, md_error_t *ep); 1188extern char *meta_canonicalize(mdsetname_t *sp, char *uname); 1189extern char *meta_canonicalize_check_set(mdsetname_t **sp, 1190 char *uname, md_error_t *ep); 1191extern int meta_is_all(char *uname); 1192extern int is_existing_metadevice(mdsetname_t *sp, char *uname); 1193extern int is_existing_hsp(mdsetname_t *sp, char *uname); 1194extern int is_existing_meta_hsp(mdsetname_t *sp, char *uname); 1195extern int is_metaname(char *uname); 1196extern int meta_is_none(char *uname); 1197extern int is_hspname(char *uname); 1198extern int parse_ctd(char *uname, uint_t *slice); 1199extern void parse_device(mdsetname_t *, char *, char **, char **); 1200extern md_set_desc *sr2setdesc(md_set_record *sr); 1201extern mdsetname_t *metasetname(char *sname, md_error_t *ep); 1202extern mdsetname_t *metasetnosetname(set_t setno, md_error_t *ep); 1203extern mdsetname_t *metafakesetname(set_t setno, char *sname); 1204extern md_set_desc *metaget_setdesc(mdsetname_t *sp, md_error_t *ep); 1205extern void metaflushsetname(mdsetname_t *sp); 1206extern void metaflushdrivenames(void); 1207extern int metaislocalset(mdsetname_t *sp); 1208extern int metaissameset(mdsetname_t *sp1, mdsetname_t *sp2); 1209extern void metaflushsidenames(mddrivename_t *dnp); 1210extern char *metadiskname(char *name); 1211extern mddrivename_t *metadrivename(mdsetname_t **spp, char *uname, 1212 md_error_t *ep); 1213extern mddrivename_t *metadrivenamebydevid(mdsetname_t **spp, char *devid, 1214 char *uname, md_error_t *ep); 1215extern mdname_t *metaslicename(mddrivename_t *dnp, uint_t sliceno, 1216 md_error_t *ep); 1217extern void metafreedrivename(mddrivename_t *dnp); 1218extern void metafreedrivenamelist(mddrivenamelist_t *dnlp); 1219extern int metadrivenamelist(mdsetname_t **spp, 1220 mddrivenamelist_t **dnlpp, 1221 int argc, char *argv[], md_error_t *ep); 1222extern mddrivename_t *metadrivenamelist_append(mddrivenamelist_t **dnlpp, 1223 mddrivename_t *dnp); 1224extern mddrivenamelist_t **meta_drivenamelist_append_wrapper( 1225 mddrivenamelist_t **dnlpp, 1226 mddrivename_t *dnp); 1227extern int meta_getdev(mdsetname_t *sp, mdname_t *np, 1228 md_error_t *ep); 1229extern mdname_t *metaname_fast(mdsetname_t **spp, char *uname, 1230 meta_device_type_t uname_type, md_error_t *ep); 1231extern mdname_t *metaname(mdsetname_t **spp, char *uname, 1232 meta_device_type_t uname_type, md_error_t *ep); 1233extern mdname_t *metamnumname(mdsetname_t **spp, minor_t mnum, 1234 int fast, md_error_t *ep); 1235extern char *get_mdname(mdsetname_t *sp, minor_t mnum); 1236extern int metaismeta(mdname_t *np); 1237extern int metachkmeta(mdname_t *np, md_error_t *ep); 1238extern int metachkdisk(mdname_t *np, md_error_t *ep); 1239extern int metachkcomp(mdname_t *np, md_error_t *ep); 1240extern void metafreenamelist(mdnamelist_t *nlp); 1241extern int metanamelist(mdsetname_t **spp, mdnamelist_t **nlpp, 1242 int argc, char *argv[], meta_device_type_t type, 1243 md_error_t *ep); 1244extern mdname_t *metanamelist_append(mdnamelist_t **nlpp, 1245 mdname_t *np); 1246extern mdnamelist_t **meta_namelist_append_wrapper(mdnamelist_t **nlpp, 1247 mdname_t *np); 1248extern mdhspname_t *metahspname(mdsetname_t **spp, 1249 char *uname, md_error_t *ep); 1250extern mdhspname_t *metahsphspname(mdsetname_t **spp, 1251 hsp_t hsp, md_error_t *ep); 1252extern char *get_hspname(mdsetname_t *sp, hsp_t mnum); 1253extern void metafreehspnamelist(mdhspnamelist_t *hspnlp); 1254extern int metahspnamelist(mdsetname_t **spp, 1255 mdhspnamelist_t **hspnlpp, 1256 int argc, char *argv[], md_error_t *ep); 1257extern mdhspname_t *metahspnamelist_append(mdhspnamelist_t **hspnlp, 1258 mdhspname_t *hspnp); 1259extern mdname_t *metadevname(mdsetname_t **spp, 1260 md_dev64_t dev, md_error_t *ep); 1261extern char *get_devname(set_t setno, md_dev64_t dev); 1262extern mdname_t *metakeyname(mdsetname_t **spp, 1263 mdkey_t key, int fast, md_error_t *ep); 1264extern void metaflushmetanames(void); 1265extern void metaflushnames(int flush_sr_cache); 1266extern int meta_get_hotspare_names(mdsetname_t *sp, 1267 mdnamelist_t **nlpp, int options, md_error_t *ep); 1268extern void meta_create_non_dup_list(mdname_t *mdnp, 1269 mddevid_t **ldevidpp); 1270extern mddrivename_t *meta_getdnp_bydevid(mdsetname_t *sp, side_t sideno, 1271 ddi_devid_t devidp, mdkey_t key, md_error_t *ep); 1272 1273 1274/* meta_nameinfo.c */ 1275extern mdsetname_t *metagetset(mdname_t *np, int bypass_daemon, 1276 md_error_t *ep); 1277extern void metafreevtoc(mdvtoc_t *vtocp); 1278extern int meta_match_enclosure(mdname_t *, mdcinfo_t *, 1279 md_error_t *); 1280extern mdvtoc_t *metagetvtoc(mdname_t *np, int nocache, uint_t *partnop, 1281 md_error_t *ep); 1282extern int metasetvtoc(mdname_t *np, md_error_t *ep); 1283extern void metaflushctlrcache(void); 1284extern mdgeom_t *metagetgeom(mdname_t *np, md_error_t *ep); 1285extern mdcinfo_t *metagetcinfo(mdname_t *np, md_error_t *ep); 1286extern int metagetpartno(mdname_t *np, md_error_t *ep); 1287extern diskaddr_t metagetsize(mdname_t *np, md_error_t *ep); 1288extern diskaddr_t metagetlabel(mdname_t *np, md_error_t *ep); 1289extern diskaddr_t metagetstart(mdsetname_t *sp, mdname_t *np, 1290 md_error_t *ep); 1291extern int metahasmddb(mdsetname_t *sp, mdname_t *np, 1292 md_error_t *ep); 1293extern char *metagetdevicesname(mdname_t *np, md_error_t *ep); 1294extern char *metagetmiscname(mdname_t *np, md_error_t *ep); 1295extern md_unit_t *meta_get_mdunit(mdsetname_t *sp, mdname_t *np, 1296 md_error_t *ep); 1297extern void meta_free_unit(mddrivename_t *dnp); 1298extern void meta_invalidate_name(mdname_t *np); 1299extern md_common_t *meta_get_unit(mdsetname_t *sp, mdname_t *np, 1300 md_error_t *ep); 1301extern int meta_isopen(mdsetname_t *sp, mdname_t *np, 1302 md_error_t *ep, mdcmdopts_t options); 1303 1304/* meta_namespace.c */ 1305extern char *meta_getnmbykey(set_t setno, side_t sideno, 1306 mdkey_t key, md_error_t *ep); 1307extern char *meta_getnmentbykey(set_t setno, side_t sideno, 1308 mdkey_t key, char **drvnm, minor_t *mnum, 1309 md_dev64_t *dev, md_error_t *ep); 1310extern char *meta_getnmentbydev(set_t setno, side_t sideno, 1311 md_dev64_t dev, char **drvnm, minor_t *mnum, 1312 mdkey_t *key, md_error_t *ep); 1313extern char *meta_gethspnmentbyid(set_t setno, side_t sideno, 1314 hsp_t hspid, md_error_t *ep); 1315extern hsp_t meta_gethspnmentbyname(set_t setno, side_t sideno, 1316 char *hspname, md_error_t *ep); 1317extern char *meta_getdidminorbykey(set_t setno, side_t sideno, 1318 mdkey_t key, md_error_t *ep); 1319extern ddi_devid_t meta_getdidbykey(set_t setno, side_t sideno, 1320 mdkey_t key, md_error_t *ep); 1321extern int meta_setdid(set_t setno, side_t sideno, mdkey_t key, 1322 md_error_t *ep); 1323extern int add_name(mdsetname_t *sp, side_t sideno, mdkey_t key, 1324 char *dname, minor_t mnum, char *bname, 1325 char *minorname, ddi_devid_t devid, md_error_t *ep); 1326extern int del_name(mdsetname_t *sp, side_t sideno, mdkey_t key, 1327 md_error_t *ep); 1328extern int add_key_name(mdsetname_t *sp, mdname_t *np, 1329 mdnamelist_t **nlpp, md_error_t *ep); 1330extern int del_key_name(mdsetname_t *sp, mdname_t *np, 1331 md_error_t *ep); 1332extern int del_key_names(mdsetname_t *sp, mdnamelist_t *nlp, 1333 md_error_t *ep); 1334extern mdkey_t add_self_name(mdsetname_t *, char *, 1335 md_mkdev_params_t *, md_error_t *); 1336extern int del_self_name(mdsetname_t *, mdkey_t, 1337 md_error_t *); 1338 1339/* meta_patch.c */ 1340extern int meta_patch_vfstab(char *cmpname, mdname_t *fsnp, 1341 char *vname, char *old_bdevname, int doit, 1342 int verbose, char **tname, md_error_t *ep); 1343extern int meta_patch_fsdev(char *fsname, mdname_t *fsnp, 1344 char *vname, md_error_t *ep); 1345extern int meta_patch_swapdev(mdname_t *fsnp, 1346 char *vname, char *old_bdevname, md_error_t *ep); 1347extern int meta_patch_mddb(char *sname, char *cname, int patch, 1348 md_error_t *ep); 1349 1350/* meta_patch_root.c */ 1351extern int meta_patch_rootdev(mdname_t *np, char *sname, 1352 char *vname, char *cname, char *dbname, int doit, 1353 int verbose, md_error_t *ep); 1354 1355/* meta_print.c */ 1356extern int meta_print_name(mdsetname_t *sp, mdname_t *namep, 1357 mdnamelist_t **nlpp, char *fname, FILE *fp, 1358 mdprtopts_t options, mdnamelist_t **lognlpp, 1359 md_error_t *ep); 1360extern int meta_print_all(mdsetname_t *sp, char *fname, 1361 mdnamelist_t **nlpp, FILE *fp, 1362 mdprtopts_t options, int *meta_print_trans_msgp, 1363 md_error_t *ep); 1364extern char *meta_print_time(md_timeval32_t *timep); 1365extern char *meta_print_hrtime(hrtime_t secs); 1366extern int meta_prbits(FILE *fp, const char *fmt, ...); 1367extern char *meta_number_to_string(diskaddr_t number, 1368 u_longlong_t blk_sz); 1369extern int meta_get_tstate(md_dev64_t dev64, uint_t *tstatep, 1370 md_error_t *ep); 1371extern int meta_print_devid(mdsetname_t *sp, FILE *fp, 1372 mddevid_t *mddevidp, md_error_t *ep); 1373 1374/* meta_raid.c */ 1375extern int meta_raid_check_component(mdsetname_t *sp, 1376 mdname_t *np, md_dev64_t dev, md_error_t *ep); 1377extern int meta_get_raid_names(mdsetname_t *sp, 1378 mdnamelist_t **nlpp, int options, md_error_t *ep); 1379extern void meta_free_raid(md_raid_t *raidp); 1380extern md_raid_t *meta_get_raid_common(mdsetname_t *sp, mdname_t *raidnp, 1381 int fast, md_error_t *ep); 1382extern md_raid_t *meta_get_raid(mdsetname_t *sp, mdname_t *raidnp, 1383 md_error_t *ep); 1384extern int meta_check_inraid(mdsetname_t *sp, mdname_t *np, 1385 diskaddr_t slblk, diskaddr_t nblks, md_error_t *ep); 1386extern int meta_check_column(mdsetname_t *sp, mdname_t *np, 1387 md_error_t *ep); 1388extern char *raid_state_to_name(md_raid_t *raidp, 1389 md_timeval32_t *tvp, uint_t tstate); 1390extern char *raid_state_to_action(md_raid_t *raidp); 1391extern char *raid_col_state_to_name(md_raidcol_t *colp, 1392 md_timeval32_t *tvp, uint_t tstate); 1393extern int meta_print_raid_options(mdhspname_t *hspnamep, 1394 char *fname, FILE *fp, md_error_t *ep); 1395extern int meta_raid_print(mdsetname_t *sp, mdname_t *raidnp, 1396 mdnamelist_t **nlpp, char *fname, FILE *fp, 1397 mdprtopts_t options, md_error_t *ep); 1398extern int meta_raid_attach(mdsetname_t *sp, mdname_t *raidnp, 1399 mdnamelist_t *nlp, mdcmdopts_t options, 1400 md_error_t *ep); 1401extern int meta_raid_get_params(mdsetname_t *sp, mdname_t *raidnp, 1402 mr_params_t *paramsp, md_error_t *ep); 1403extern int meta_raid_set_params(mdsetname_t *sp, mdname_t *raidnp, 1404 mr_params_t *paramsp, md_error_t *ep); 1405extern int meta_raid_replace(mdsetname_t *sp, mdname_t *raidnp, 1406 mdname_t *oldnp, mdname_t *newnp, 1407 mdcmdopts_t options, md_error_t *ep); 1408extern int meta_raid_enable(mdsetname_t *sp, mdname_t *raidnp, 1409 mdname_t *compnp, mdcmdopts_t options, 1410 md_error_t *ep); 1411extern diskaddr_t meta_default_raid_interlace(void); 1412extern int meta_raid_check_interlace(diskaddr_t interlace, 1413 char *uname, md_error_t *ep); 1414extern int meta_check_raid(mdsetname_t *sp, md_raid_t *raidp, 1415 mdcmdopts_t options, md_error_t *ep); 1416extern int meta_create_raid(mdsetname_t *sp, md_raid_t *raidp, 1417 mdcmdopts_t options, md_error_t *ep); 1418extern int meta_init_raid(mdsetname_t **spp, 1419 int argc, char *argv[], mdcmdopts_t options, 1420 md_error_t *ep); 1421extern int meta_raid_reset(mdsetname_t *sp, mdname_t *np, 1422 mdcmdopts_t options, md_error_t *ep); 1423extern int meta_raid_anycomp_is_err(mdsetname_t *, mdnamelist_t *); 1424 1425/* meta_raid_resync.c */ 1426extern int meta_raid_resync(mdsetname_t *sp, mdname_t *raidnp, 1427 daddr_t size, md_error_t *ep); 1428extern int meta_raid_resync_all(mdsetname_t *sp, daddr_t size, 1429 md_error_t *ep); 1430 1431extern int meta_raid_regen_byname(mdsetname_t *sp, 1432 mdname_t *raidnp, diskaddr_t size, md_error_t *ep); 1433 1434/* meta_repartition.c */ 1435extern int meta_replicaslice(mddrivename_t *dnp, 1436 uint_t *slicep, md_error_t *ep); 1437 1438/* meta_replace.c */ 1439extern int meta_replace_byname(mdsetname_t *sp, mdname_t *namep, 1440 mdname_t *oldnp, mdname_t *newnp, 1441 mdcmdopts_t options, md_error_t *ep); 1442extern int meta_enable_byname(mdsetname_t *sp, mdname_t *namep, 1443 mdname_t *compnp, mdcmdopts_t options, 1444 md_error_t *ep); 1445 1446/* meta_reset.c */ 1447extern int meta_reset(mdsetname_t *sp, mdname_t *np, 1448 mdcmdopts_t options, md_error_t *ep); 1449extern int meta_reset_all(mdsetname_t *sp, mdcmdopts_t options, 1450 md_error_t *ep); 1451extern int meta_reset_by_name(mdsetname_t *sp, mdname_t *np, 1452 mdcmdopts_t options, md_error_t *ep); 1453 1454/* meta_resync.c */ 1455extern int meta_resync_byname(mdsetname_t *sp, mdname_t *np, 1456 daddr_t size, md_error_t *ep, md_resync_cmd_t cmd); 1457extern int meta_resync_all(mdsetname_t *sp, daddr_t size, 1458 md_error_t *ep); 1459 1460/* meta_set.c */ 1461extern set_t get_max_sets(md_error_t *ep); 1462extern int get_max_meds(md_error_t *ep); 1463extern side_t getmyside(mdsetname_t *sp, md_error_t *ep); 1464extern md_set_record *getsetbyname(char *setname, md_error_t *ep); 1465extern md_set_record *getsetbynum(set_t setno, md_error_t *ep); 1466extern int meta_check_drive_inuse(mdsetname_t *sp, 1467 mddrivename_t *dnp, int check_db, md_error_t *ep); 1468extern int meta_check_ownership(mdsetname_t *sp, md_error_t *ep); 1469extern int meta_check_ownership_on_host(mdsetname_t *sp, 1470 char *hostname, md_error_t *ep); 1471extern int meta_is_member(char *node_name, md_mn_nodeid_t node_id, 1472 mndiskset_membershiplist_t *nl); 1473extern int meta_getnextside_devinfo(mdsetname_t *sp, char *bname, 1474 side_t *sideno, char **ret_bname, char **ret_dname, 1475 minor_t *ret_mnum, md_error_t *ep); 1476extern int meta_getside_devinfo(mdsetname_t *sp, char *bname, 1477 side_t sideno, char **ret_bname, char **ret_dname, 1478 minor_t *ret_mnum, md_error_t *ep); 1479extern int meta_is_drive_in_anyset(mddrivename_t *dnp, 1480 mdsetname_t **spp, int bypass_daemon, 1481 md_error_t *ep); 1482extern int meta_is_drive_in_thisset(mdsetname_t *sp, 1483 mddrivename_t *dnp, int bypass_daemon, 1484 md_error_t *ep); 1485extern int meta_is_devid_in_anyset(void *devid, 1486 mdsetname_t **spp, md_error_t *ep); 1487extern int meta_is_devid_in_thisset(mdsetname_t *sp, 1488 void *devid, md_error_t *ep); 1489extern int meta_set_balance(mdsetname_t *sp, md_error_t *ep); 1490extern int meta_set_destroy(mdsetname_t *sp, int lock_set, 1491 md_error_t *ep); 1492extern int meta_set_purge(mdsetname_t *sp, int bypass_cluster, 1493 int forceflg, md_error_t *ep); 1494extern int meta_set_query(mdsetname_t *sp, mddb_dtag_lst_t **dtlpp, 1495 md_error_t *ep); 1496extern mddrivename_t *metadrivename_withdrkey(mdsetname_t *sp, 1497 side_t sideno, mdkey_t key, int flags, 1498 md_error_t *ep); 1499extern void metafreedrivedesc(md_drive_desc **dd); 1500extern md_drive_desc *metaget_drivedesc(mdsetname_t *sp, int flags, 1501 md_error_t *ep); 1502extern md_drive_desc *metaget_drivedesc_fromnamelist(mdsetname_t *sp, 1503 mdnamelist_t *nlp, md_error_t *ep); 1504extern md_drive_desc *metaget_drivedesc_sideno(mdsetname_t *sp, 1505 side_t sideno, int flags, md_error_t *ep); 1506extern int metaget_setownership(mdsetname_t *sp, md_error_t *ep); 1507extern char *mynode(void); 1508extern int strinlst(char *str, int cnt, char **lst); 1509extern int meta_get_reserved_names(mdsetname_t *sp, 1510 mdnamelist_t **nlpp, int options, md_error_t *ep); 1511extern int meta_set_join(mdsetname_t *sp, md_error_t *ep); 1512extern int meta_set_withdraw(mdsetname_t *sp, md_error_t *ep); 1513extern int meta_reconfig_choose_master(); 1514extern int meta_mnsync_user_records(mdsetname_t *sp, 1515 md_error_t *ep); 1516extern int meta_mnsync_diskset_mddbs(mdsetname_t *sp, 1517 md_error_t *ep); 1518extern int meta_mnjoin_all(mdsetname_t *sp, md_error_t *ep); 1519extern int meta_getandsetmaster(mdsetname_t *sp, 1520 md_mnset_record *mnsr, md_set_desc *sd, 1521 md_error_t *ep); 1522extern int meta_devid_use(md_error_t *ep); 1523 1524/* meta_set_drv.c */ 1525extern int meta_make_sidenmlist(mdsetname_t *, 1526 mddrivename_t *, int imp_flag, 1527 md_im_drive_info_t *midp, md_error_t *); 1528extern int meta_set_adddrives(mdsetname_t *sp, 1529 mddrivenamelist_t *dnlp, daddr_t dbsize, 1530 int force_label, md_error_t *ep); 1531extern int meta_set_deletedrives(mdsetname_t *sp, 1532 mddrivenamelist_t *dnlp, int forceflg, 1533 md_error_t *ep); 1534 1535/* meta_set_hst.c */ 1536extern int meta_set_checkname(char *setname, md_error_t *ep); 1537extern int meta_set_addhosts(mdsetname_t *sp, int multi_node, 1538 int node_c, char **node_v, int auto_take, 1539 md_error_t *ep); 1540extern int meta_set_deletehosts(mdsetname_t *sp, int node_c, 1541 char **node_v, int forceflg, md_error_t *ep); 1542extern int meta_set_auto_take(mdsetname_t *sp, int take_val, 1543 md_error_t *ep); 1544 1545/* meta_set_med.c */ 1546extern int meta_set_addmeds(mdsetname_t *sp, int node_c, 1547 char **node_v, md_error_t *ep); 1548extern int meta_set_deletemeds(mdsetname_t *sp, int node_c, 1549 char **node_v, int forceflg, md_error_t *ep); 1550 1551/* meta_set_tkr.c */ 1552extern int meta_set_take(mdsetname_t *sp, mhd_mhiargs_t *mhiargsp, 1553 int flags, int usetag, md_error_t *ep); 1554extern int meta_set_release(mdsetname_t *sp, md_error_t *ep); 1555extern int meta_update_mb(mdsetname_t *sp, md_drive_desc *dd, 1556 md_error_t *ep); 1557 1558/* meta_setup.c */ 1559extern char *myname; 1560extern FILE *metalogfp; 1561extern int metasyslog; 1562extern uint_t verbosity; 1563extern hrtime_t start_time; 1564extern sigset_t allsigs; 1565#define ANYSIG allsigs 1566extern char *meta_lock_name(set_t setno); 1567extern int meta_unlock(mdsetname_t *sp, md_error_t *ep); 1568extern int meta_lock(mdsetname_t *sp, int print_status, 1569 md_error_t *ep); 1570extern int meta_lock_nowait(mdsetname_t *sp, md_error_t *ep); 1571extern int meta_lock_status(mdsetname_t *sp, md_error_t *ep); 1572extern int md_daemonize(mdsetname_t *sp, md_error_t *ep); 1573extern void md_exit(mdsetname_t *sp, int eval); 1574extern void md_post_sig(int sig); 1575extern int md_got_sig(void); 1576extern int md_which_sig(void); 1577extern void md_rb_sig_handling_on(void); 1578extern void md_rb_sig_handling_off(int sig_seen, int sig); 1579extern void setup_mc_log(uint_t level); 1580extern int md_init(int argc, char *argv[], 1581 int dosyslog, int doadmin, md_error_t *ep); 1582extern int md_init_nosig(int argc, char *argv[], 1583 int dosyslog, int doadmin, md_error_t *ep); 1584 1585extern int md_init_daemon(char *name, md_error_t *ep); 1586 1587/* meta_smf.c */ 1588extern int meta_smf_enable(uint_t flags, md_error_t *ep); 1589extern int meta_smf_disable(uint_t flags, md_error_t *ep); 1590extern int meta_smf_isonline(uint_t flags, md_error_t *ep); 1591extern int meta_smf_getmask(); 1592 1593/* meta_sp.c */ 1594extern int meta_sp_check_component(mdsetname_t *sp, 1595 mdname_t *np, md_error_t *ep); 1596extern int meta_get_sp_names(mdsetname_t *sp, mdnamelist_t **nlpp, 1597 int options, md_error_t *ep); 1598extern int meta_check_insp(mdsetname_t *sp, mdname_t *np, 1599 diskaddr_t slblk, diskaddr_t nblks, md_error_t *ep); 1600extern int meta_sp_print(mdsetname_t *sp, mdname_t *np, 1601 mdnamelist_t **nlpp, char *fname, FILE *fp, 1602 mdprtopts_t options, md_error_t *ep); 1603extern md_sp_t *meta_get_sp_common(mdsetname_t *sp, mdname_t *np, 1604 int fast, md_error_t *ep); 1605extern md_sp_t *meta_get_sp(mdsetname_t *sp, mdname_t *np, 1606 md_error_t *ep); 1607extern int meta_init_sp(mdsetname_t **spp, int argc, char *argv[], 1608 mdcmdopts_t options, md_error_t *ep); 1609extern void meta_free_sp(md_sp_t *spp); 1610extern int meta_sp_issp(mdsetname_t *sp, mdname_t *np, 1611 md_error_t *ep); 1612extern int meta_sp_reset(mdsetname_t *sp, mdname_t *np, 1613 mdcmdopts_t options, md_error_t *ep); 1614extern int meta_sp_reset_component(mdsetname_t *sp, char *name, 1615 mdcmdopts_t options, md_error_t *ep); 1616extern int meta_sp_attach(mdsetname_t *sp, mdname_t *np, 1617 char *addsize, mdcmdopts_t options, 1618 sp_ext_length_t alignment, md_error_t *ep); 1619extern int meta_recover_sp(mdsetname_t *sp, mdname_t *np, int argc, 1620 char *argv[], mdcmdopts_t options, md_error_t *ep); 1621extern boolean_t meta_sp_can_create_sps(mdsetname_t *mdsetnamep, 1622 mdname_t *mdnamep, int number_of_sps, 1623 blkcnt_t sp_size); 1624extern boolean_t meta_sp_can_create_sps_on_drive(mdsetname_t *mdsetnamep, 1625 mddrivename_t *mddrivenamep, int number_of_sps, 1626 blkcnt_t sp_size); 1627extern blkcnt_t meta_sp_get_free_space(mdsetname_t *mdsetnamep, 1628 mdname_t *mdnamep); 1629extern blkcnt_t meta_sp_get_free_space_on_drive(mdsetname_t *mdsetnamep, 1630 mddrivename_t *mddrivenamep); 1631extern int meta_sp_get_number_of_possible_sps( 1632 mdsetname_t *mdsetnamep, mdname_t *mdnamep, 1633 blkcnt_t sp_size); 1634extern int meta_sp_get_number_of_possible_sps_on_drive( 1635 mdsetname_t *mdsetnamep, 1636 mddrivename_t *mddrivenamep, blkcnt_t sp_size); 1637extern blkcnt_t meta_sp_get_possible_sp_size(mdsetname_t *mdsetnamep, 1638 mdname_t *mdnamep, int number_of_sps); 1639extern blkcnt_t meta_sp_get_possible_sp_size_on_drive( 1640 mdsetname_t *mdsetnamep, 1641 mddrivename_t *mddrivenamep, int number_of_sps); 1642extern int meta_sp_setstatus(mdsetname_t *sp, minor_t *minors, 1643 int num_units, sp_status_t status, md_error_t *ep); 1644extern int meta_sp_parsesize(char *s, sp_ext_length_t *szp); 1645extern int meta_sp_update_abr(mdsetname_t *sp, md_error_t *ep); 1646extern void *meta_mn_sp_update_abr(void *arg); 1647 1648/* meta_stat.c */ 1649extern int meta_stat(const char *, struct stat *); 1650extern void metaflushstatcache(void); 1651 1652/* meta_stripe.c */ 1653extern int meta_stripe_check_component(mdsetname_t *sp, 1654 mdname_t *np, md_dev64_t dev, md_error_t *ep); 1655extern int meta_stripe_replace(mdsetname_t *sp, mdname_t *stripenp, 1656 mdname_t *oldnp, mdname_t *newnp, 1657 mdcmdopts_t options, md_error_t *ep); 1658extern int meta_get_stripe_names(mdsetname_t *sp, 1659 mdnamelist_t **nlpp, int options, md_error_t *ep); 1660extern void meta_free_stripe(md_stripe_t *stripep); 1661extern md_stripe_t *meta_get_stripe_common(mdsetname_t *sp, 1662 mdname_t *stripenp, int fast, md_error_t *ep); 1663extern md_stripe_t *meta_get_stripe(mdsetname_t *sp, mdname_t *stripenp, 1664 md_error_t *ep); 1665extern int meta_check_instripe(mdsetname_t *sp, mdname_t *np, 1666 diskaddr_t slblk, diskaddr_t nblks, md_error_t *ep); 1667extern int meta_check_component(mdsetname_t *sp, mdname_t *np, 1668 int force, md_error_t *ep); 1669extern char *comp_state_to_name(md_comp_t *mdcp, 1670 md_timeval32_t *tvp, uint_t tstate); 1671extern int meta_print_stripe_options(mdhspname_t *hspnamep, 1672 char *fname, FILE *fp, md_error_t *ep); 1673extern int meta_stripe_print(mdsetname_t *sp, mdname_t *stripenp, 1674 mdnamelist_t **nlpp, char *fname, FILE *fp, 1675 mdprtopts_t options, md_error_t *ep); 1676extern int meta_find_erred_comp(mdsetname_t *sp, 1677 mdname_t *stripenp, mdname_t **compnpp, 1678 comp_state_t *compstate, md_error_t *ep); 1679extern int meta_stripe_attach(mdsetname_t *sp, mdname_t *stripenp, 1680 mdnamelist_t *nlp, diskaddr_t interlace, 1681 mdcmdopts_t options, md_error_t *ep); 1682extern int meta_stripe_get_params(mdsetname_t *sp, 1683 mdname_t *stripenp, ms_params_t *paramsp, 1684 md_error_t *ep); 1685extern int meta_stripe_set_params(mdsetname_t *sp, 1686 mdname_t *stripenp, ms_params_t *paramsp, 1687 md_error_t *ep); 1688extern diskaddr_t meta_default_stripe_interlace(void); 1689extern int meta_stripe_check_interlace(diskaddr_t interlace, 1690 char *uname, md_error_t *ep); 1691extern int meta_check_stripe(mdsetname_t *sp, 1692 md_stripe_t *stripep, mdcmdopts_t options, 1693 md_error_t *ep); 1694extern int meta_create_stripe(mdsetname_t *sp, 1695 md_stripe_t *stripep, mdcmdopts_t options, 1696 md_error_t *ep); 1697extern int meta_init_stripe(mdsetname_t **spp, 1698 int argc, char *argv[], mdcmdopts_t options, 1699 md_error_t *ep); 1700extern int meta_stripe_reset(mdsetname_t *sp, mdname_t *stripenp, 1701 mdcmdopts_t options, md_error_t *ep); 1702extern int meta_stripe_anycomp_is_err(mdsetname_t *, 1703 mdnamelist_t *); 1704 1705/* meta_systemfile.c */ 1706extern int meta_systemfile_copy(char *sname, int doroot, 1707 int domddb, int doit, int verbose, char **tname, 1708 FILE **tfp, md_error_t *ep); 1709extern int meta_systemfile_append_mdroot(mdname_t *rootnp, 1710 char *sname, char *tname, FILE *tfp, int ismeta, 1711 int doit, int verbose, md_error_t *ep); 1712extern int meta_systemfile_append_mddb(char *cname, char *sname, 1713 char *tname, FILE *tfp, int doit, int verbose, 1714 int check, md_error_t *ep); 1715 1716/* meta_tab.c */ 1717extern void meta_tab_dump(md_tab_t *tabp, FILE *fp); 1718extern void meta_tab_free(md_tab_t *tabp); 1719extern md_tab_t *meta_tab_parse(char *filename, md_error_t *ep); 1720extern md_tab_line_t *meta_tab_find(mdsetname_t *sp, md_tab_t *tabp, 1721 char *name, mdinittypes_t type); 1722 1723/* meta_trans.c */ 1724extern int meta_trans_replace(mdsetname_t *sp, mdname_t *transnp, 1725 mdname_t *oldnp, mdname_t *newnp, 1726 mdcmdopts_t options, md_error_t *ep); 1727extern int meta_get_trans_names(mdsetname_t *sp, 1728 mdnamelist_t **nlpp, int options, md_error_t *ep); 1729extern void meta_free_trans(md_trans_t *transp); 1730extern md_trans_t *meta_get_trans(mdsetname_t *sp, mdname_t *transnp, 1731 md_error_t *ep); 1732extern md_trans_t *meta_get_trans_common(mdsetname_t *sp, 1733 mdname_t *transnp, int fast, md_error_t *ep); 1734extern int meta_check_intrans(mdsetname_t *sp, mdname_t *np, 1735 mdchkopts_t options, diskaddr_t slblk, 1736 diskaddr_t nblks, md_error_t *ep); 1737extern int meta_check_master(mdsetname_t *sp, mdname_t *np, 1738 int force, md_error_t *ep); 1739extern int meta_check_log(mdsetname_t *sp, mdname_t *np, 1740 md_error_t *ep); 1741extern char *mt_l_error_to_name(md_trans_t *transp, 1742 md_timeval32_t *tvp, uint_t tstate); 1743extern char *mt_flags_to_name(md_trans_t *transp, 1744 md_timeval32_t *tvp, uint_t tstate); 1745extern char *mt_flags_to_action(md_trans_t *transp); 1746extern char *mt_l_error_to_action( 1747 mdsetname_t *sp, 1748 mdnamelist_t *transnlp, 1749 mdname_t *lognamep, 1750 md_error_t *ep); 1751extern int meta_trans_print(mdsetname_t *sp, mdname_t *transnp, 1752 mdnamelist_t **nlistpp, char *fname, FILE *fp, 1753 mdprtopts_t options, int *meta_print_trans_msgp, 1754 mdnamelist_t **lognlpp, md_error_t *ep); 1755extern int meta_logs_print(mdsetname_t *sp, mdnamelist_t *lognlp, 1756 mdnamelist_t **nlistpp, char *fname, FILE *fp, 1757 mdprtopts_t options, md_error_t *ep); 1758extern int meta_trans_attach(mdsetname_t *sp, mdname_t *transnp, 1759 mdname_t *lognp, mdcmdopts_t options, 1760 md_error_t *ep); 1761extern int meta_trans_detach(mdsetname_t *sp, mdname_t *transnp, 1762 mdcmdopts_t options, int *delayed, md_error_t *ep); 1763extern int meta_check_trans(mdsetname_t *sp, md_trans_t *transp, 1764 mdcmdopts_t options, md_error_t *ep); 1765extern int meta_create_trans(mdsetname_t *sp, md_trans_t *transp, 1766 mdcmdopts_t options, char *uname, md_error_t *ep); 1767extern int meta_init_trans(mdsetname_t **spp, 1768 int argc, char *argv[], mdcmdopts_t options, 1769 md_error_t *ep); 1770extern int meta_trans_reset(mdsetname_t *sp, mdname_t *transnp, 1771 mdcmdopts_t options, md_error_t *ep); 1772 1773/* meta_userflags.c */ 1774extern int meta_getuserflags(mdsetname_t *sp, mdname_t *np, 1775 uint_t *userflags, md_error_t *ep); 1776extern int meta_setuserflags(mdsetname_t *sp, mdname_t *np, 1777 uint_t userflags, md_error_t *ep); 1778 1779/* metarpcopen.c */ 1780extern CLIENT *meta_client_create_retry(char *hostname, 1781 clnt_create_func_t func, void *data, 1782 time_t tout, md_error_t *ep); 1783extern CLIENT *meta_client_create(char *host, rpcprog_t prognum, 1784 rpcvers_t version, char *nettype); 1785extern CLIENT *metarpcopen(char *hostname, long time_out, 1786 md_error_t *ep); 1787extern void metarpcclose(CLIENT *clntp); 1788extern void metarpccloseall(void); 1789extern int cl_sto(CLIENT *clntp, char *hostname, long time_out, 1790 md_error_t *ep); 1791 1792/* metasplitname.c */ 1793extern int splitname(char *devname, md_splitname *splitname); 1794extern char *splicename(md_splitname *splitname); 1795 1796/* meta_notify.c */ 1797extern int meta_notify_createq(char *qname, ulong_t flags, 1798 md_error_t *ep); 1799extern int meta_notify_deleteq(char *qname, md_error_t *ep); 1800extern int meta_notify_validq(char *qname, md_error_t *ep); 1801extern int meta_notify_listq(char ***qnames, md_error_t *ep); 1802extern int meta_notify_flushq(char *qname, md_error_t *ep); 1803 1804extern int meta_notify_getev(char *qname, ulong_t flags, 1805 md_ev_t *evp, md_error_t *ep); 1806extern int meta_notify_getevlist(char *qname, ulong_t flags, 1807 md_evlist_t **evlpp, md_error_t *ep); 1808extern int meta_notify_putev(md_ev_t *evp, md_error_t *ep); 1809extern int meta_notify_putevlist(md_evlist_t *evlistp, 1810 md_error_t *ep); 1811extern void meta_notify_freeevlist(md_evlist_t *evlp); 1812 1813extern int meta_notify_sendev(ev_obj_t tag, set_t set, 1814 md_dev64_t dev, evid_t event); 1815 1816extern int meta_exchange(mdsetname_t *, mdname_t *, mdname_t *, 1817 mdcmdopts_t, md_error_t *); 1818extern int meta_rename(mdsetname_t *, mdname_t *, mdname_t *, 1819 mdcmdopts_t, md_error_t *); 1820/* meta_se_notify.c */ 1821extern void meta_svm_sysevent(char *se_class, char *se_subclass, 1822 uint32_t tag, set_t setno, md_dev64_t devid); 1823 1824/* metgetroot.c */ 1825extern void *meta_get_current_root(md_error_t *ep); 1826extern mdname_t *meta_get_current_root_dev(mdsetname_t *sp, 1827 md_error_t *ep); 1828 1829/* meta_time.c */ 1830extern int meta_gettimeofday(md_timeval32_t *tv); 1831 1832/* meta_devadm.c */ 1833extern int meta_update_namespace(set_t setno, side_t sideno, 1834 char *devname, md_dev64_t dev, mdkey_t key, 1835 char *pname, md_error_t *ep); 1836extern int meta_fixdevid(mdsetname_t *sp, mddevopts_t options, 1837 char *diskname, md_error_t *ep); 1838extern int meta_upd_ctdnames(mdsetname_t **sp, set_t setno, 1839 side_t sideno, mddrivename_t *dnp, char **newname, 1840 md_error_t *ep); 1841extern int pathname_reload(mdsetname_t **sp, set_t setno, 1842 md_error_t *ep); 1843extern int meta_update_devtree(minor_t mnum); 1844 1845/* meta_mn_comm.c */ 1846extern int mdmn_send_message(set_t setno, md_mn_msgtype_t type, 1847 uint_t flags, md_mn_nodeid_t recipient, 1848 char *data, int size, md_mn_result_t **resp, 1849 md_error_t *ep); 1850extern int mdmn_send_message_with_msgid(set_t setno, 1851 md_mn_msgtype_t type, uint_t flags, 1852 md_mn_nodeid_t recipient, char *data, 1853 int size, md_mn_result_t **resp, 1854 md_mn_msgid_t *msgid, md_error_t *ep); 1855extern int mdmn_create_msgid(md_mn_msgid_t *id); 1856extern int mdmn_reinit_set(set_t setno, long timeout); 1857extern int mdmn_resume(set_t setno, md_mn_msgclass_t class, 1858 uint_t flags, long timeout); 1859extern int mdmn_suspend(set_t setno, md_mn_msgclass_t class, 1860 long timeout); 1861extern int mdmn_msgtype_lock(md_mn_msgtype_t msgtype, 1862 uint_t locktype); 1863extern void mdmn_abort(void); 1864extern md_mn_result_t *copy_result(md_mn_result_t *res); 1865extern void free_result(md_mn_result_t *res); 1866extern md_mn_msg_t *copy_msg(md_mn_msg_t *src, md_mn_msg_t *dest); 1867 1868/* meta_import.c */ 1869extern int read_master_block(md_error_t *ep, int fd, void *bp, 1870 int bsize); 1871extern int read_database_block(md_error_t *, int, mddb_mb_t *, int, 1872 void *, int); 1873extern daddr_t getphysblk(mddb_block_t, mddb_mb_t *); 1874 1875extern md_im_drive_info_t *pick_good_disk(md_im_set_desc_t *misp); 1876 1877extern void meta_unrslv_replicated_mb(mdsetname_t *sp, 1878 md_drive_desc *dd, mddrivenamelist_t *dnlp, 1879 md_error_t *ep); 1880extern void meta_unrslv_replicated_nm(mdsetname_t *sp, 1881 md_drive_desc *dd, mddrivenamelist_t *dnlp, 1882 md_error_t *ep); 1883extern void * replicated_list_lookup(uint_t devid_len, 1884 void *old_devid); 1885extern int build_replicated_disks_list(md_error_t *ep, 1886 mddrivenamelist_t *dnlp); 1887 1888/* 1889 * pnm_rec is used to store the mapping from keys in the NM namespace 1890 * to actual physical devices. The current name of a physical device, used 1891 * by a set that can be imported, can be retrieved by matching the did_key 1892 * (deviceID entry) in the DID_SHR_NM namespace to the min_devid_key in the 1893 * DID_NM namespace(the did_key to the min_key). Then matching the min_key 1894 * in the DID_NM namespace to the n_key in the NM namespace. 1895 * 1896 * n_name is defined to be an array, so that only one malloc is needed for the 1897 * entire datastructure. 1898 */ 1899typedef struct pnm_rec { 1900 mdkey_t n_key; /* The n_key/min_key value */ 1901 struct pnm_rec *next; 1902 ushort_t n_namlen; 1903 char n_name[1]; /* The name of the physical device */ 1904} pnm_rec_t; 1905 1906/* Indentation value for metaimport output */ 1907#define META_INDENT 4 1908 1909/* Flags for metaimport reporting */ 1910#define META_IMP_REPORT 0x0001 1911#define META_IMP_VERBOSE 0x0002 1912#define META_IMP_PASS1 0x1000 1913 1914extern int meta_list_disks(md_error_t *, md_im_names_t *); 1915extern mddrivenamelist_t *meta_prune_cnames(md_error_t *, 1916 md_im_names_t *, int); 1917extern int meta_get_and_report_set_info( 1918 mddrivenamelist_t *, md_im_set_desc_t **, 1919 int, uint_t, int *, int, 1920 md_im_drive_info_t *, md_error_t *); 1921extern void free_pnm_rec_list(pnm_rec_t **); 1922extern int meta_imp_set(md_im_set_desc_t *, 1923 char *, int, bool_t, md_error_t *); 1924extern int meta_imp_drvused(mdsetname_t *sp, 1925 mddrivename_t *dnp, md_error_t *ep); 1926extern int meta_replica_quorum(md_im_set_desc_t *misp); 1927extern int meta_imp_set_adddrives(mdsetname_t *sp, 1928 mddrivenamelist_t *dnlp, 1929 md_im_set_desc_t *misp, md_error_t *ep); 1930extern void meta_free_im_set_desc(md_im_set_desc_t *misp); 1931extern int clnt_imp_adddrvs(char *hostname, 1932 mdsetname_t *sp, md_drive_desc *dd, 1933 md_timeval32_t timestamp, 1934 ulong_t genid, md_error_t *ep); 1935 1936/* Flags for direction in copy_msg_2 */ 1937#define MD_MN_COPY_TO_ONDISK 0x0001 1938#define MD_MN_COPY_TO_INCORE 0x0002 1939 1940extern void copy_msg_2(md_mn_msg_t *incorep, 1941 md_mn_msg_od_t *ondiskp, int direction); 1942extern void free_msg(md_mn_msg_t *msg); 1943 1944extern md_mn_msgclass_t mdmn_get_message_class(md_mn_msgtype_t msgtype); 1945extern void (*mdmn_get_handler(md_mn_msgtype_t msgtype)) 1946 (md_mn_msg_t *msg, uint_t flags, 1947 md_mn_result_t *res); 1948extern int (*mdmn_get_submessage_generator(md_mn_msgtype_t type)) 1949 (md_mn_msg_t *msg, md_mn_msg_t **msglist); 1950extern time_t mdmn_get_timeout(md_mn_msgtype_t msgtype); 1951 1952extern int meta_read_nodelist(int *nodecnt, 1953 mndiskset_membershiplist_t **nl, md_error_t *ep); 1954extern int meta_write_nodelist(int nodecnt, char **nids, 1955 md_error_t *ep); 1956extern void meta_free_nodelist(mndiskset_membershiplist_t *nl); 1957 1958/* meta_mn_subr.c */ 1959/* defines for flags argument for meta_mn_send_command() */ 1960#define MD_DISP_STDERR 0x0000 1961#define MD_IGNORE_STDERR 0x0001 1962#define MD_DRYRUN 0x0002 1963#define MD_RETRY_BUSY 0x0004 1964#define MD_NOLOG 0x0008 1965#define MD_PANIC_WHEN_INCONSISTENT 0x0010 1966 1967/* define for initall_context argument for meta_mn_send_command() */ 1968#define NO_CONTEXT_STRING NULL 1969 1970extern int meta_is_mn_set(mdsetname_t *sp, md_error_t *ep); 1971extern int meta_is_mn_name(mdsetname_t **sp, char *name, 1972 md_error_t *ep); 1973extern void meta_ping_mnset(set_t setno); 1974extern int meta_mn_send_command(mdsetname_t *sp, int argc, 1975 char *argv[], int flags, char *initall_context, 1976 md_error_t *ep); 1977extern int meta_mn_send_suspend_writes(minor_t mnum, 1978 md_error_t *ep); 1979extern int meta_mn_send_setsync(mdsetname_t *sp, 1980 mdname_t *mirnp, daddr_t size, md_error_t *ep); 1981extern int meta_mn_send_metaclear_command(mdsetname_t *sp, 1982 char *name, mdcmdopts_t options, int pflag, 1983 md_error_t *ep); 1984extern int meta_mn_send_resync_starting(mdname_t *mirnp, 1985 md_error_t *ep); 1986extern int meta_mn_change_owner(md_set_mmown_params_t **opp, 1987 set_t setno, uint_t mnum, uint_t owner, 1988 uint_t flags); 1989extern int meta_mn_singlenode(void); 1990extern int meta_mn_send_get_tstate(md_dev64_t dev, uint_t *tstatep, 1991 md_error_t *ep); 1992/* meta_set_prv.c */ 1993extern int setup_db_bydd(mdsetname_t *sp, md_drive_desc *dd, 1994 int force, md_error_t *ep); 1995extern int snarf_set(mdsetname_t *sp, bool_t stale_bool, 1996 md_error_t *ep); 1997extern int halt_set(mdsetname_t *sp, md_error_t *ep); 1998 1999/* meta_statconcise.c */ 2000extern void print_concise_entry(int indent, char *name, 2001 diskaddr_t size, char mtype); 2002extern char *meta_get_raid_col_state(rcs_state_t); 2003extern char *meta_get_stripe_state(comp_state_t); 2004extern char *meta_get_hs_state(hotspare_states_t); 2005extern int report_metastat_info(mddb_mb_t *, mddb_lb_t *, 2006 mddb_rb_t *, pnm_rec_t **, mdname_t *, int, 2007 md_timeval32_t *, md_error_t *); 2008 2009#ifdef __cplusplus 2010} 2011#endif 2012 2013#endif /* _META_H */ 2014