7712 mandoc -Tlint does always exit with error code 0
[unleashed.git] / usr / src / cmd / lvm / metassist / layout / layout_device_cache.h
blob6328e6b7ec8632d534afa8596c847c71ae1e1612
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _LAYOUT_DEVICE_CACHE_H
28 #define _LAYOUT_DEVICE_CACHE_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
37 * This module manages cached copies of a dm_descriptor_t's nvpair
38 * list of attributes and its device name. The caches are used to
39 * make sure that the memory allocated to these objects is correctly
40 * released after the layout process has finished. The cached attrs
41 * also allow the layout code to store and retrieve transient,
42 * layout-private data in the same data structure as the other
43 * relevant device information.
45 * There are two primary caches of information:
47 * descriptor->name - which maps a dm_descriptor_t handle to
48 * the associated device's name
50 * name->attributes - which maps a device name to an nvlist_t
51 * attribute collection.
53 * These two data structures thus allow the following lookup chain:
54 * descriptor->name->attributes.
56 * The attributes are accessed by device name because the it is the
57 * unique identifier for the device. The descriptor returned by
58 * libdiskmgt is just an arbitrary handle, multiple calls into the
59 * library may return different descriptors for the same device.
61 * Descriptors are also get re-cycled by the library which could
62 * result in the same descriptor being used to represent different
63 * devices (although not concurrently). To prevent such recycling
64 * all of the descriptors are held until the layout process has
65 * completed.
67 * Performance testing indicated that searching the lists of known
68 * devices by display (CTD or DID) name or alias was a significant
69 * bottleneck. A mapping from display name to descriptor was added
70 * to address this.
72 * The module should be initialized once by calling create_device_caches()
73 * prior to any call which accesses data maintained by the cache.
75 * The caches should be flushed after all accesses have completed by
76 * calling release_device_caches.
79 #include "libdiskmgt.h"
80 #include "layout_device_util.h"
82 extern int create_device_caches();
83 extern int release_device_caches();
85 extern int add_cached_descriptor(char *name, dm_descriptor_t desc);
86 extern dm_descriptor_t find_cached_descriptor(char *name);
88 extern int add_cached_name(dm_descriptor_t desc, char *name);
89 extern int get_name(dm_descriptor_t desc, char **name);
91 extern int add_cached_attributes(char *name, nvlist_t *attrs);
92 extern int get_cached_attributes(dm_descriptor_t desc, nvlist_t **list);
94 extern int new_descriptor(dm_descriptor_t *desc);
95 extern int add_descriptors_to_free(dm_descriptor_t *desc_list);
97 #ifdef __cplusplus
99 #endif
101 #endif /* _LAYOUT_DEVICE_CACHE_H */