mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
scan: drop bcache between lvm shell commands
A running lvm shell keeps all lvm devices open unless the bcache is dropped.
This commit is contained in:
parent
a01a8d7172
commit
ae21305ee7
22
lib/cache/lvmcache.c
vendored
22
lib/cache/lvmcache.c
vendored
@ -406,7 +406,7 @@ int lvmcache_verify_lock_order(const char *vgname)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!_lock_hash)
|
if (!_lock_hash)
|
||||||
return_0;
|
return 1;
|
||||||
|
|
||||||
dm_hash_iterate(n, _lock_hash) {
|
dm_hash_iterate(n, _lock_hash) {
|
||||||
if (!dm_hash_get_data(_lock_hash, n))
|
if (!dm_hash_get_data(_lock_hash, n))
|
||||||
@ -836,6 +836,9 @@ static int _label_scan_invalid(struct cmd_context *cmd)
|
|||||||
dev_count++;
|
dev_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dm_list_empty(&devs))
|
||||||
|
return 1;
|
||||||
|
|
||||||
log_debug_cache("Scanning %d devs with invalid info.", dev_count);
|
log_debug_cache("Scanning %d devs with invalid info.", dev_count);
|
||||||
|
|
||||||
ret = label_scan_devs(cmd, &devs);
|
ret = label_scan_devs(cmd, &devs);
|
||||||
@ -1236,8 +1239,10 @@ int lvmcache_label_scan(struct cmd_context *cmd)
|
|||||||
struct dm_list del_cache_devs;
|
struct dm_list del_cache_devs;
|
||||||
struct dm_list add_cache_devs;
|
struct dm_list add_cache_devs;
|
||||||
struct lvmcache_info *info;
|
struct lvmcache_info *info;
|
||||||
|
struct lvmcache_vginfo *vginfo;
|
||||||
struct device_list *devl;
|
struct device_list *devl;
|
||||||
struct format_type *fmt;
|
struct format_type *fmt;
|
||||||
|
int vginfo_count = 0;
|
||||||
|
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
@ -1247,6 +1252,8 @@ int lvmcache_label_scan(struct cmd_context *cmd)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_debug_cache("Finding VG info");
|
||||||
|
|
||||||
/* Avoid recursion when a PVID can't be found! */
|
/* Avoid recursion when a PVID can't be found! */
|
||||||
if (_scanning_in_progress)
|
if (_scanning_in_progress)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1315,6 +1322,8 @@ int lvmcache_label_scan(struct cmd_context *cmd)
|
|||||||
dm_list_init(&del_cache_devs);
|
dm_list_init(&del_cache_devs);
|
||||||
dm_list_init(&add_cache_devs);
|
dm_list_init(&add_cache_devs);
|
||||||
|
|
||||||
|
log_debug_cache("Resolving duplicate devices");
|
||||||
|
|
||||||
_choose_preferred_devs(cmd, &del_cache_devs, &add_cache_devs);
|
_choose_preferred_devs(cmd, &del_cache_devs, &add_cache_devs);
|
||||||
|
|
||||||
dm_list_iterate_items(devl, &del_cache_devs) {
|
dm_list_iterate_items(devl, &del_cache_devs) {
|
||||||
@ -1354,6 +1363,14 @@ int lvmcache_label_scan(struct cmd_context *cmd)
|
|||||||
_scanning_in_progress = 0;
|
_scanning_in_progress = 0;
|
||||||
_force_label_scan = 0;
|
_force_label_scan = 0;
|
||||||
|
|
||||||
|
dm_list_iterate_items(vginfo, &_vginfos) {
|
||||||
|
if (is_orphan_vg(vginfo->vgname))
|
||||||
|
continue;
|
||||||
|
vginfo_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug_cache("Found VG info for %d VGs", vginfo_count);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2291,7 +2308,8 @@ static void _lvmcache_destroy_lockname(struct dm_hash_node *n)
|
|||||||
void lvmcache_destroy(struct cmd_context *cmd, int retain_orphans, int reset)
|
void lvmcache_destroy(struct cmd_context *cmd, int retain_orphans, int reset)
|
||||||
{
|
{
|
||||||
struct dm_hash_node *n;
|
struct dm_hash_node *n;
|
||||||
log_verbose("Wiping internal VG cache");
|
|
||||||
|
log_debug_cache("Dropping VG info");
|
||||||
|
|
||||||
_has_scanned = 0;
|
_has_scanned = 0;
|
||||||
|
|
||||||
|
@ -3013,10 +3013,9 @@ int lvm_run_command(struct cmd_context *cmd, int argc, char **argv)
|
|||||||
lvmnotify_send(cmd);
|
lvmnotify_send(cmd);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (test_mode()) {
|
|
||||||
log_verbose("Test mode: Wiping internal cache");
|
lvmcache_destroy(cmd, 1, 1);
|
||||||
lvmcache_destroy(cmd, 1, 0);
|
label_scan_destroy(cmd);
|
||||||
}
|
|
||||||
|
|
||||||
if ((config_string_cft = remove_config_tree_by_source(cmd, CONFIG_STRING)))
|
if ((config_string_cft = remove_config_tree_by_source(cmd, CONFIG_STRING)))
|
||||||
dm_config_destroy(config_string_cft);
|
dm_config_destroy(config_string_cft);
|
||||||
|
@ -4508,7 +4508,6 @@ int process_each_pv(struct cmd_context *cmd,
|
|||||||
* before process_each_pv is called.
|
* before process_each_pv is called.
|
||||||
*/
|
*/
|
||||||
if (!trust_cache() && !orphans_locked) {
|
if (!trust_cache() && !orphans_locked) {
|
||||||
log_debug("Scanning for available devices");
|
|
||||||
lvmcache_destroy(cmd, 1, 0);
|
lvmcache_destroy(cmd, 1, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user