2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. 2N/A * Metadevice diskset interfaces 2N/A * meta_devid_supported_in_did() 2N/A * Used to see if the Sun Cluster did driver supports 2N/A * Returns MD_DEVID_SUPPORTED if supported 2N/A * MD_DEVID_NOT_SUPPORTED if not supported 2N/A * We only want to make the expensive ioctl when needed 2N/A * Exported Entry Points 2N/A * First try and operate assuming the other side 2N/A * is running a SVM version that supports device id 2N/A * in disksets i.e. is running SVM RPC version 2. 2N/A * If this call fails due to the other side running 2N/A * a SVM version that does not support device id 2N/A * in disksets i.e. is running SVM RPC version 1, we 2N/A * fallback to the old behaviour. 2N/A * If the disk is connected to the remote node then the 2N/A * only thing we can be certain of is that the disk will 2N/A * have the same devid on that node, it may not have the 2N/A * same minor number nor the same ctd name. But if it 2N/A * does have the same ctd name then use it. In most cases 2N/A * there will only be a single entry returned but if the 2N/A * system has multi-path disks with MPXIO turned off there 2N/A * will be multiple entries. Attempting to choose the same 2N/A * name will give the user as consistent a view across the 2N/A * nodes as possible. 2N/A * we have a valid devid and minor name. 2N/A "searching for %s on %s\n"),
2N/A * Unable to get a minor name for the device so try 2N/A * searching without one which is painfully slow. 2N/A "searching for %s on %s\n"),
2N/A * If the return value was ENOTSUP, we know the 2N/A * other side is not running a SVM version that 2N/A * supports device id in disksets. We fallback 2N/A * to the previous behaviour in that case. 2N/A * If the device does not exist on the remote node then 2N/A * the returned dev should indicate this (NODEV64) but 2N/A * we also check to make sure the returned name is not 2N/A * empty to make sure that the namespace does not get 2N/A * but being paranoid). 2N/A * The rname returned from the remote node maybe different 2N/A * to the rname on this node, therefore we need to build up 2N/A * a dnp for this new rname. 2N/A /* different rname */ 2N/A "failback search for %s on %s\n"),
2N/A * Check if the disk in question is an EFI disk. 2N/A * For EFI disks, we compare the device 2N/A * id for the disks in question. 2N/A * If we are here, it means that dnp->devid 2N/A * We want to explicitly get the device id 2N/A * For VTOC disks, we compare the dev_t and 2N/A * timestamp for the disks in question. 2N/A /* If regular diskset */ 2N/A * If the first loop fails we may be in a situation where this host 2N/A * is configured as part of a cluster yet not running in the cluster 2N/A * mode. If so, the names stored in sd->sd_nodes[] are going to be 2N/A * nodeid's instead of hostnames. See if we can find a match that way. 2N/A /* Don't need device id information from this ioctl */ 2N/A /* Kill any resyncs that are running on mirrors in this set */ 2N/A /* run to end of list */ 2N/A /* allocate new list element */ 2N/A /* Don't care if set record is MN or not */ 2N/A /* Looking for name only match */ 2N/A /* Looking for name and setno match */ 2N/A /* Looking for name, setno, and timestamp match */ 2N/A * Looking for name, setno, timestamp, and genid on 2N/A * other host is GT than other host. 2N/A /* Looking for name, setno, timestamp, and genid match */ 2N/A * Set record structure was allocated from RPC routine getset 2N/A * so this structure is only of size md_set_record even if 2N/A * the MN flag is set. So, clear the flag so that the free 2N/A * code doesn't attempt to free a structure the size of 2N/A * Skip empty slots, and my own slot. 2N/A /* We get here, we currently have no owner. */ 2N/A * Mark the set record MD_SR_OK. 2N/A /* Will only return a multi-node diskset record */ 2N/A * Get current genid for each node. 2N/A /* Skip empty slots */ 2N/A /* Should be a non-multinode diskset */ 2N/A * Set record structure was allocated from RPC routine 2N/A * getset so this structure is only of size 2N/A * md_set_record even if the MN flag is set. So, 2N/A * clear the flag so that the free code doesn't 2N/A * attempt to free a structure the size of 2N/A * Mark the set record MD_SR_OK 2N/A /* Skip empty slots */ 2N/A * The disk has no side name information 2N/A * minor_name will be NULL if dnp->devid == NULL 2N/A * - see metagetvtoc() 2N/A * If the device does not have a devid or 2N/A * did driver does not support devids. 2N/A * The devid associated with the dnp does not have 2N/A * a minor name and so we must add it in. 2N/A /* If need to fix LB then setup old_devid info */ 2N/A * Don't need device id information from 2N/A /* return success */ 2N/A /* Don't need device id information from this ioctl */