d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * CDDL HEADER START
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * The contents of this file are subject to the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * Common Development and Distribution License (the "License").
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * You may not use this file except in compliance with the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * or http://www.opensolaris.org/os/licensing.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * See the License for the specific language governing permissions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * and limitations under the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * When distributing Covered Code, include this CDDL HEADER in each
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * If applicable, add the following below this CDDL HEADER, with the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * fields enclosed by brackets "[]" replaced with your own identifying
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * information: Portions Copyright [yyyy] [name of copyright owner]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * CDDL HEADER END
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * Use is subject to license terms.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%extern bool_t xdr_md_set_params_t(XDR *xdrs, md_set_params_t *objp);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%extern bool_t xdr_mp_unit_t(XDR *xdrs, mp_unit_t *objp);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%extern bool_t xdr_diskaddr_t(XDR *xdrs, diskaddr_t *objp);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%extern bool_t xdr_md_dev64_t(XDR *xdrs, md_dev64_t *objp);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%extern bool_t xdr_daddr_t(XDR *xdrs, daddr_t *objp);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%extern bool_t xdr_daddr32_t(XDR *xdrs, daddr32_t *objp);
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%#endif /* ! _KERNEL */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* every message handler must have these parameters */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%#define HANDLER_PARMS md_mn_msg_t *msg, uint_t flag, md_mn_result_t *res
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* every submessage generator must have these parameters */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy%#define SMGEN_PARMS md_mn_msg_t *msg, md_mn_msg_t **msglist
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* when ever a new message type is added, an entry for it must be made in the master msg_table (defined in mdmn_commd_server.c*/
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_NULL = 0, /* special message type for internal use only */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_BC_CMD_RETRY, /* Send metacommand, retry on busy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_REQUIRE_OWNER, /* Request to become Mirror owner */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_CHOOSE_OWNER, /* Request to allocate a resync owner */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_CHANGE_OWNER, /* Change owner to a specific node */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SUSPEND_WRITES, /* Suspend writes to a mirror */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_STATE_UPDATE_RESWR, /* Ch state of comp & resume writes */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_STATE_UPDATE, /* Susp writes/Change state of comp */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_ALLOCATE_HOTSPARE, /* Allocate hotspare for mirror comp */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_RESYNC_STARTING, /* Resync thread starting */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_RESYNC_NEXT, /* Next resync region */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_RESYNC_FINISH, /* Resync thread finished */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_RESYNC_PHASE_DONE, /* End of resync phase */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SET_CAP, /* Set capability, eg ABR */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_VERBOSITY, /* set various levels of debug */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_MDDB_PARSE, /* Slave to reparse portion of mddb */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_MDDB_BLOCK, /* Block parse/recs on master/slave */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_META_DB_ATTACH, /* Master message to add new mddb */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SM_MDDB_ATTACH, /* Submessage to add new mddb */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_META_DB_DETACH, /* Master message to delete mddb */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SM_MDDB_DETACH, /* Submessage to delete mddb */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_META_DB_NEWSIDE, /* Node adding mddb side info */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_META_DB_DELSIDE, /* Node deleting mddb side info */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_META_MD_ADDSIDE, /* Node adding md side info */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_META_MD_DELSIDE, /* Node deleting md side info */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_MDDB_OPTRECERR, /* Node detects opt rec error */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_ABORT, /* Stop sending messages to any node */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_STATE_UPDATE_RESWR2, /* UPDATE_RESWR for watermark updates */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_STATE_UPDATE2, /* STATE_UPDATE for watermark updates */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_ALLOCATE_HOTSPARE2, /* ALLOCATE_HOTSPARE for wm updates */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SP_SETSTAT, /* Update status of softpart */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_GET_TSTATE, /* Get tstate from master */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_GET_MIRROR_STATE, /* Get submirror state from master */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SP_SETSTAT2, /* Update softpart status on error */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_SETSYNC, /* Set resync status */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_POKE_HOTSPARES, /* Call poke_hotspares */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_ADDMDNAME, /* Add metadevice name */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_RR_DIRTY, /* Mark RR range as dirty */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_MSG_RR_CLEAN, /* Mark RR range as clean */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_NMESSAGES /* insert elements before */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * A message of class X may trigger only messages of classes higher than X
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Feel free to change the order here. As long as you leave MD_MSG_CL_NULL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * and NCLASSES, of course
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MSG_CLASS0 = 0, /* special message class for internal use only */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy MD_MN_NCLASSES /* insert elements before */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * The following are needed for things like suspend and resume when the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy% * operation is to be applied to all classes / all sets.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* This is for state changes of submirror components */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy minor_t msg_stch_mnum; /* minor number of dev */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy int msg_stch_new_state; /* new state for comp */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy mddb_recid_t msg_stch_hs_id; /* hs_id at time of call */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* This is for suspending writes to a mirror */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy minor_t msg_suspwr_mnum; /* minor number of dev */
struct md_mn_msg_chooseid_t {
struct md_mn_msg_chowner_t {
struct md_mn_msg_setcap_t {
struct md_mn_verbose_t {
struct md_mn_msg_allochsp_t {
struct md_mn_msg_resync_t {
/* Message format for blocking/unblocking MDDB parsing and record changes */
struct md_mn_msg_mddb_block_t {
int msg_block_flags;
struct md_mn_msg_mddb_parse_t {
struct md_mn_msg_meta_db_attach_t {
int msg_cnt;
int msg_dbsize;
struct md_mn_msg_meta_db_detach_t {
struct md_mn_msg_meta_db_newside_t {
struct md_mn_msg_meta_db_delside_t {
struct md_mn_msg_meta_md_addside_t {
struct md_mn_msg_meta_md_delside_t {
struct md_mn_msg_mddb_optrecerr_t {
struct md_mn_msg_iocset_t {
struct md_mn_msg_sp_setstat_t {
int sp_setstat_status;
struct md_mn_msg_addkeyname_t {
struct md_mn_msg_addmdname_t {
struct md_mn_msg_delkeyname_t {
struct md_mn_msg_gettstate_t {
struct md_mn_msg_mir_state_t {
struct md_mn_msg_mir_state_res_t {
struct md_mn_msg_setsync_t {
struct md_mn_msg_pokehsp_t {
struct md_mn_msg_rr_dirty_t {
int rr_nodeid;
%#define MDMN_MSG_RR_CLEAN_DATA_MAX_BYTES \
% ((MDMN_MAX_KMSG_DATA) - \
% sizeof (struct md_mn_msg_rr_clean_t))
%#define MDMN_MSG_RR_CLEAN_SIZE_DATA(x) \
% (sizeof (struct md_mn_msg_rr_clean_t) + (x))
%#define MDMN_MSG_RR_CLEAN_MSG_SIZE(x) \
% (sizeof (struct md_mn_msg_rr_clean_t) \
% + MDMN_MSG_RR_CLEAN_DATA_BYTES(x))
%#define MDMN_MSG_RR_CLEAN_DATA(x) \
% sizeof (struct md_mn_msg_rr_clean_t))
struct md_mn_msg_rr_clean_t {
unsigned int rr_mnum;
%#define MD_MSGF_INHERIT_BITS \
struct md_mn_msgid_t {
%#define MSGID_CMP(a, b) \
struct md_mn_msg_t {
% sizeof (md_mn_msg_t))
struct md_mn_msg_od_t {
struct md_mn_kmsg_t {
int kmsg_size;
struct md_mn_result_t {
int mmr_comm_state;
int mmr_exitval;
struct md_mn_kresult_t {
int kmmr_comm_state;
int kmmr_exitval;
int kmmr_res_size;
enum md_mn_retval_t {
MDMNE_NULL = 0,
% (!md_mn_is_commd_present() && \
struct md_mn_set_and_class_t {
struct md_mn_type_and_lock_t {