24
24
#define ORPHAN_PREFIX VG_ORPHANS
25
25
#define ORPHAN_VG_NAME(fmt) ORPHAN_PREFIX "_" fmt
27
#define CACHE_INVALID 0x00000001
28
#define CACHE_LOCKED 0x00000002
30
27
/* LVM specific per-volume info */
31
28
/* Eventual replacement for struct physical_volume perhaps? */
33
30
struct cmd_context;
34
31
struct format_type;
35
32
struct volume_group;
39
struct lvmcache_vginfo {
40
struct dm_list list; /* Join these vginfos together */
41
struct dm_list infos; /* List head for lvmcache_infos */
42
const struct format_type *fmt;
43
char *vgname; /* "" == orphan */
45
char vgid[ID_LEN + 1];
47
struct lvmcache_vginfo *next; /* Another VG with same name? */
49
size_t vgmetadata_size;
50
char *vgmetadata; /* Copy of VG metadata as format_text string */
51
struct config_tree *cft; /* Config tree created from vgmetadata */
52
/* Lifetime is directly tied to vgmetadata */
53
struct volume_group *cached_vg;
55
unsigned vg_use_count; /* Counter of vg reusage */
56
unsigned precommitted; /* Is vgmetadata live or precommitted? */
60
struct lvmcache_info {
61
struct dm_list list; /* Join VG members together */
62
struct dm_list mdas; /* list head for metadata areas */
63
struct dm_list das; /* list head for data areas */
64
struct lvmcache_vginfo *vginfo; /* NULL == unknown */
66
const struct format_type *fmt;
68
uint64_t device_size; /* Bytes */
33
struct physical_volume;
34
struct dm_config_tree;
35
struct format_instance;
39
struct lvmcache_vginfo;
72
41
int lvmcache_init(void);
42
void lvmcache_allow_reads_with_lvmetad(void);
73
44
void lvmcache_destroy(struct cmd_context *cmd, int retain_orphans);
75
46
/* Set full_scan to 1 to reread every filtered device label or
95
66
int lvmcache_verify_lock_order(const char *vgname);
98
const struct format_type *fmt_from_vgname(const char *vgname, const char *vgid, unsigned revalidate_labels);
69
const struct format_type *lvmcache_fmt_from_vgname(struct cmd_context *cmd, const char *vgname, const char *vgid, unsigned revalidate_labels);
99
71
/* Decrement and test if there are still vg holders in vginfo. */
100
int vginfo_holders_dec_and_test_for_zero(struct lvmcache_vginfo *vginfo);
101
struct lvmcache_vginfo *vginfo_from_vgname(const char *vgname,
72
int lvmcache_vginfo_holders_dec_and_test_for_zero(struct lvmcache_vginfo *vginfo);
74
struct lvmcache_vginfo *lvmcache_vginfo_from_vgname(const char *vgname,
102
75
const char *vgid);
103
struct lvmcache_vginfo *vginfo_from_vgid(const char *vgid);
104
struct lvmcache_info *info_from_pvid(const char *pvid, int valid_only);
105
const char *vgname_from_vgid(struct dm_pool *mem, const char *vgid);
106
struct device *device_from_pvid(struct cmd_context *cmd, const struct id *pvid,
76
struct lvmcache_vginfo *lvmcache_vginfo_from_vgid(const char *vgid);
77
struct lvmcache_info *lvmcache_info_from_pvid(const char *pvid, int valid_only);
78
const char *lvmcache_vgname_from_vgid(struct dm_pool *mem, const char *vgid);
79
struct device *lvmcache_device_from_pvid(struct cmd_context *cmd, const struct id *pvid,
107
80
unsigned *scan_done_once, uint64_t *label_sector);
108
const char *pvid_from_devname(struct cmd_context *cmd,
81
const char *lvmcache_pvid_from_devname(struct cmd_context *cmd,
109
82
const char *dev_name);
110
83
char *lvmcache_vgname_from_pvid(struct cmd_context *cmd, const char *pvid);
111
int vgs_locked(void);
112
int vgname_is_locked(const char *vgname);
84
const char *lvmcache_vgname_from_info(struct lvmcache_info *info);
85
int lvmcache_vgs_locked(void);
86
int lvmcache_vgname_is_locked(const char *vgname);
88
void lvmcache_seed_infos_from_lvmetad(struct cmd_context *cmd);
114
90
/* Returns list of struct str_lists containing pool-allocated copy of vgnames */
115
91
/* If include_internal is not set, return only proper vg names. */
126
102
const char *vgid);
128
104
/* Returns cached volume group metadata. */
129
struct volume_group *lvmcache_get_vg(const char *vgid, unsigned precommitted);
105
struct volume_group *lvmcache_get_vg(struct cmd_context *cmd, const char *vgname,
106
const char *vgid, unsigned precommitted);
130
107
void lvmcache_drop_metadata(const char *vgname, int drop_precommitted);
131
108
void lvmcache_commit_metadata(const char *vgname);
110
int lvmcache_pvid_is_locked(const char *pvid);
111
int lvmcache_fid_add_mdas(struct lvmcache_info *info, struct format_instance *fid,
112
const char *id, int id_len);
113
int lvmcache_fid_add_mdas_pv(struct lvmcache_info *info, struct format_instance *fid);
114
int lvmcache_fid_add_mdas_vg(struct lvmcache_vginfo *vginfo, struct format_instance *fid);
115
int lvmcache_populate_pv_fields(struct lvmcache_info *info,
116
struct physical_volume *pv,
117
int scan_label_only);
118
int lvmcache_check_format(struct lvmcache_info *info, const struct format_type *fmt);
119
void lvmcache_del_mdas(struct lvmcache_info *info);
120
void lvmcache_del_das(struct lvmcache_info *info);
121
int lvmcache_add_mda(struct lvmcache_info *info, struct device *dev,
122
uint64_t start, uint64_t size, unsigned ignored);
123
int lvmcache_add_da(struct lvmcache_info *info, uint64_t start, uint64_t size);
125
const struct format_type *lvmcache_fmt(struct lvmcache_info *info);
126
struct label *lvmcache_get_label(struct lvmcache_info *info);
128
void lvmcache_update_pv(struct lvmcache_info *info, struct physical_volume *pv,
129
const struct format_type *fmt);
130
int lvmcache_update_das(struct lvmcache_info *info, struct physical_volume *pv);
131
int lvmcache_foreach_mda(struct lvmcache_info *info,
132
int (*fun)(struct metadata_area *, void *),
135
int lvmcache_foreach_da(struct lvmcache_info *info,
136
int (*fun)(struct disk_locn *, void *),
139
int lvmcache_foreach_pv(struct lvmcache_vginfo *vg,
140
int (*fun)(struct lvmcache_info *, void *), void * baton);
142
uint64_t lvmcache_device_size(struct lvmcache_info *info);
143
void lvmcache_set_device_size(struct lvmcache_info *info, uint64_t size);
144
struct device *lvmcache_device(struct lvmcache_info *info);
145
void lvmcache_make_valid(struct lvmcache_info *info);
146
int lvmcache_is_orphan(struct lvmcache_info *info);
147
int lvmcache_uncertain_ownership(struct lvmcache_info *info);
148
int lvmcache_mda_count(struct lvmcache_info *info);
149
int lvmcache_vgid_is_cached(const char *vgid);
150
int lvmcache_smallest_mda_size(struct lvmcache_info *info);