mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
lvmcache: new function to check if VG is foreign
When not using lvmetad, this uses the system_id field in the cached vginfo structs that are populated during a scan. When using lvmetad, this requests the VG from lvmetad, and checks the system_id field in the returned metadata.
This commit is contained in:
parent
05ac836798
commit
eb22f7c8f7
14
lib/cache/lvmcache.c
vendored
14
lib/cache/lvmcache.c
vendored
@ -2402,3 +2402,17 @@ void lvmcache_get_max_name_lengths(struct cmd_context *cmd,
|
||||
}
|
||||
}
|
||||
|
||||
int lvmcache_vg_is_foreign(struct cmd_context *cmd, const char *vgname, const char *vgid)
|
||||
{
|
||||
struct lvmcache_vginfo *vginfo;
|
||||
int ret = 0;
|
||||
|
||||
if (lvmetad_active())
|
||||
return lvmetad_vg_is_foreign(cmd, vgname, vgid);
|
||||
|
||||
if ((vginfo = lvmcache_vginfo_from_vgid(vgid)))
|
||||
ret = !is_system_id_allowed(cmd, vginfo->system_id);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
1
lib/cache/lvmcache.h
vendored
1
lib/cache/lvmcache.h
vendored
@ -194,5 +194,6 @@ int lvmcache_contains_lock_type_sanlock(struct cmd_context *cmd);
|
||||
void lvmcache_get_max_name_lengths(struct cmd_context *cmd,
|
||||
unsigned *pv_max_name_len, unsigned *vg_max_name_len);
|
||||
|
||||
int lvmcache_vg_is_foreign(struct cmd_context *cmd, const char *vgname, const char *vgid);
|
||||
|
||||
#endif
|
||||
|
26
lib/cache/lvmetad.c
vendored
26
lib/cache/lvmetad.c
vendored
@ -1808,3 +1808,29 @@ void lvmetad_validate_global_cache(struct cmd_context *cmd, int force)
|
||||
_update_changed_pvs_in_udev(cmd, &pvc_before, &pvc_after);
|
||||
}
|
||||
}
|
||||
|
||||
int lvmetad_vg_is_foreign(struct cmd_context *cmd, const char *vgname, const char *vgid)
|
||||
{
|
||||
daemon_reply reply;
|
||||
struct dm_config_node *top;
|
||||
const char *system_id = NULL;
|
||||
char uuid[64];
|
||||
int ret;
|
||||
|
||||
if (!id_write_format((const struct id*)vgid, uuid, sizeof(uuid)))
|
||||
return_0;
|
||||
|
||||
reply = _lvmetad_send("vg_lookup",
|
||||
"uuid = %s", uuid,
|
||||
"name = %s", vgname,
|
||||
NULL);
|
||||
|
||||
if ((top = dm_config_find_node(reply.cft->root, "metadata")))
|
||||
system_id = dm_config_find_str(top, "metadata/system_id", NULL);
|
||||
|
||||
ret = !is_system_id_allowed(cmd, system_id);
|
||||
|
||||
daemon_reply_destroy(reply);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
3
lib/cache/lvmetad.h
vendored
3
lib/cache/lvmetad.h
vendored
@ -169,6 +169,8 @@ int lvmetad_pvscan_foreign_vgs(struct cmd_context *cmd, activation_handler handl
|
||||
int lvmetad_vg_clear_outdated_pvs(struct volume_group *vg);
|
||||
void lvmetad_validate_global_cache(struct cmd_context *cmd, int force);
|
||||
|
||||
int lvmetad_vg_is_foreign(struct cmd_context *cmd, const char *vgname, const char *vgid);
|
||||
|
||||
# else /* LVMETAD_SUPPORT */
|
||||
|
||||
# define lvmetad_init(cmd) do { } while (0)
|
||||
@ -197,6 +199,7 @@ void lvmetad_validate_global_cache(struct cmd_context *cmd, int force);
|
||||
# define lvmetad_pvscan_foreign_vgs(cmd, handler) (0)
|
||||
# define lvmetad_vg_clear_outdated_pvs(vg) (1)
|
||||
# define lvmetad_validate_global_cache(cmd, force) do { } while (0)
|
||||
# define lvmetad_vg_is_foreign(cmd, vgname, vgid) (0)
|
||||
|
||||
# endif /* LVMETAD_SUPPORT */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user