mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
segtype: check for activation
Before setting static variable with check passed state, detect if we are allowed to talk to driver.
This commit is contained in:
parent
43897239b3
commit
8857b22764
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.140 -
|
Version 2.02.140 -
|
||||||
===================================
|
===================================
|
||||||
|
Correct checking of target presence when driver access is disabled.
|
||||||
Eval poolmetadatasize arg earlier in lvresize.
|
Eval poolmetadatasize arg earlier in lvresize.
|
||||||
Fix vgcfgrestore to respect allocatable attribute of PVs.
|
Fix vgcfgrestore to respect allocatable attribute of PVs.
|
||||||
Add report/mark_hidden_devices to lvm.conf.
|
Add report/mark_hidden_devices to lvm.conf.
|
||||||
|
@ -224,20 +224,22 @@ static int _target_present(struct cmd_context *cmd,
|
|||||||
const struct dm_config_value *cv;
|
const struct dm_config_value *cv;
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
|
if (!activation())
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!_cache_checked) {
|
if (!_cache_checked) {
|
||||||
_cache_present = target_present(cmd, "cache", 1);
|
|
||||||
|
|
||||||
if (!target_version("cache", &maj, &min, &patchlevel)) {
|
|
||||||
log_error("Failed to determine version of cache kernel module");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_cache_checked = 1;
|
_cache_checked = 1;
|
||||||
|
|
||||||
|
if (!(_cache_present = target_present(cmd, "cache", 1)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!target_version("cache", &maj, &min, &patchlevel))
|
||||||
|
return_0;
|
||||||
|
|
||||||
if ((maj < 1) ||
|
if ((maj < 1) ||
|
||||||
((maj == 1) && (min < 3))) {
|
((maj == 1) && (min < 3))) {
|
||||||
_cache_present = 0;
|
_cache_present = 0;
|
||||||
log_error("The cache kernel module is version %u.%u.%u. "
|
log_warn("WARNING: The cache kernel module is version %u.%u.%u. "
|
||||||
"Version 1.3.0+ is required.",
|
"Version 1.3.0+ is required.",
|
||||||
maj, min, patchlevel);
|
maj, min, patchlevel);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -49,13 +49,16 @@ static int _errseg_target_present(struct cmd_context *cmd,
|
|||||||
static int _errseg_checked = 0;
|
static int _errseg_checked = 0;
|
||||||
static int _errseg_present = 0;
|
static int _errseg_present = 0;
|
||||||
|
|
||||||
/* Reported truncated in older kernels */
|
if (!activation())
|
||||||
if (!_errseg_checked &&
|
return 0;
|
||||||
(target_present(cmd, "error", 0) ||
|
|
||||||
target_present(cmd, "erro", 0)))
|
/* Reported truncated in older kernels */
|
||||||
_errseg_present = 1;
|
if (!_errseg_checked) {
|
||||||
|
_errseg_checked = 1;
|
||||||
|
_errseg_present = target_present(cmd, "error", 0) ||
|
||||||
|
target_present(cmd, "erro", 0);
|
||||||
|
}
|
||||||
|
|
||||||
_errseg_checked = 1;
|
|
||||||
return _errseg_present;
|
return _errseg_present;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,9 +398,14 @@ static int _mirrored_target_present(struct cmd_context *cmd,
|
|||||||
unsigned maj2, min2, patchlevel2;
|
unsigned maj2, min2, patchlevel2;
|
||||||
char vsn[80];
|
char vsn[80];
|
||||||
|
|
||||||
|
if (!activation())
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!_mirrored_checked) {
|
if (!_mirrored_checked) {
|
||||||
_mirrored_checked = 1;
|
_mirrored_checked = 1;
|
||||||
_mirrored_present = target_present(cmd, "mirror", 1);
|
|
||||||
|
if (!(_mirrored_present = target_present(cmd, "mirror", 1)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* block_on_error available as "block_on_error" log
|
* block_on_error available as "block_on_error" log
|
||||||
|
@ -320,12 +320,13 @@ static int _raid_target_present(struct cmd_context *cmd,
|
|||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
if (!_raid_checked) {
|
if (!_raid_checked) {
|
||||||
_raid_present = target_present(cmd, "raid", 1);
|
_raid_checked = 1;
|
||||||
|
|
||||||
if (!target_version("raid", &maj, &min, &patchlevel)) {
|
if (!(_raid_present = target_present(cmd, "raid", 1)))
|
||||||
log_error("Cannot read target version of RAID kernel module.");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
if (!target_version("raid", &maj, &min, &patchlevel))
|
||||||
|
return_0;
|
||||||
|
|
||||||
for (i = 0; i < DM_ARRAY_SIZE(_features); ++i)
|
for (i = 0; i < DM_ARRAY_SIZE(_features); ++i)
|
||||||
if ((maj > _features[i].maj) ||
|
if ((maj > _features[i].maj) ||
|
||||||
@ -334,8 +335,6 @@ static int _raid_target_present(struct cmd_context *cmd,
|
|||||||
else
|
else
|
||||||
log_very_verbose("Target raid does not support %s.",
|
log_very_verbose("Target raid does not support %s.",
|
||||||
_features[i].feature);
|
_features[i].feature);
|
||||||
|
|
||||||
_raid_checked = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attributes)
|
if (attributes)
|
||||||
|
@ -377,9 +377,12 @@ static int _replicator_target_present(struct cmd_context *cmd,
|
|||||||
static int _checked = 0;
|
static int _checked = 0;
|
||||||
static int _present = 0;
|
static int _present = 0;
|
||||||
|
|
||||||
|
if (!activation())
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!_checked) {
|
if (!_checked) {
|
||||||
_present = target_present(cmd, REPLICATOR_MODULE, 1);
|
|
||||||
_checked = 1;
|
_checked = 1;
|
||||||
|
_present = target_present(cmd, REPLICATOR_MODULE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _present;
|
return _present;
|
||||||
|
@ -145,13 +145,17 @@ static int _snap_target_present(struct cmd_context *cmd,
|
|||||||
static unsigned _snap_attrs = 0;
|
static unsigned _snap_attrs = 0;
|
||||||
uint32_t maj, min, patchlevel;
|
uint32_t maj, min, patchlevel;
|
||||||
|
|
||||||
|
if (!activation())
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!_snap_checked) {
|
if (!_snap_checked) {
|
||||||
_snap_checked = 1;
|
_snap_checked = 1;
|
||||||
_snap_present = target_present(cmd, "snapshot", 1) &&
|
|
||||||
target_present(cmd, "snapshot-origin", 0);
|
|
||||||
|
|
||||||
if (_snap_present &&
|
if (!(_snap_present = target_present(cmd, "snapshot", 1) &&
|
||||||
target_version("snapshot", &maj, &min, &patchlevel) &&
|
target_present(cmd, "snapshot-origin", 0)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (target_version("snapshot", &maj, &min, &patchlevel) &&
|
||||||
(maj > 1 ||
|
(maj > 1 ||
|
||||||
(maj == 1 && (min >= 12 || (min == 10 && patchlevel >= 2)))))
|
(maj == 1 && (min >= 12 || (min == 10 && patchlevel >= 2)))))
|
||||||
_snap_attrs |= SNAPSHOT_FEATURE_FIXED_LEAK;
|
_snap_attrs |= SNAPSHOT_FEATURE_FIXED_LEAK;
|
||||||
@ -163,12 +167,12 @@ static int _snap_target_present(struct cmd_context *cmd,
|
|||||||
*attributes = _snap_attrs;
|
*attributes = _snap_attrs;
|
||||||
|
|
||||||
/* TODO: test everything at once */
|
/* TODO: test everything at once */
|
||||||
if (seg && (seg->status & MERGING)) {
|
if (_snap_present && seg && (seg->status & MERGING)) {
|
||||||
if (!_snap_merge_checked) {
|
if (!_snap_merge_checked) {
|
||||||
_snap_merge_present = target_present(cmd, "snapshot-merge", 0);
|
_snap_merge_present = target_present(cmd, "snapshot-merge", 0);
|
||||||
_snap_merge_checked = 1;
|
_snap_merge_checked = 1;
|
||||||
}
|
}
|
||||||
return _snap_present && _snap_merge_present;
|
return _snap_merge_present;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _snap_present;
|
return _snap_present;
|
||||||
|
@ -192,11 +192,14 @@ static int _striped_target_present(struct cmd_context *cmd,
|
|||||||
static int _striped_checked = 0;
|
static int _striped_checked = 0;
|
||||||
static int _striped_present = 0;
|
static int _striped_present = 0;
|
||||||
|
|
||||||
if (!_striped_checked)
|
if (!activation())
|
||||||
_striped_present = target_present(cmd, "linear", 0) &&
|
return 0;
|
||||||
target_present(cmd, "striped", 0);
|
|
||||||
|
|
||||||
_striped_checked = 1;
|
if (!_striped_checked) {
|
||||||
|
_striped_checked = 1;
|
||||||
|
_striped_present = target_present(cmd, "linear", 0) &&
|
||||||
|
target_present(cmd, "striped", 0);
|
||||||
|
}
|
||||||
|
|
||||||
return _striped_present;
|
return _striped_present;
|
||||||
}
|
}
|
||||||
|
@ -678,13 +678,17 @@ static int _thin_target_present(struct cmd_context *cmd,
|
|||||||
const struct dm_config_value *cv;
|
const struct dm_config_value *cv;
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
||||||
if (!_checked) {
|
if (!activation())
|
||||||
_present = target_present(cmd, _thin_pool_module, 1);
|
return 0;
|
||||||
|
|
||||||
if (!target_version(_thin_pool_module, &maj, &min, &patchlevel)) {
|
if (!_checked) {
|
||||||
log_error("Cannot read %s target version.", _thin_pool_module);
|
_checked = 1;
|
||||||
|
|
||||||
|
if (!(_present = target_present(cmd, _thin_pool_module, 1)))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
if (!target_version(_thin_pool_module, &maj, &min, &patchlevel))
|
||||||
|
return_0;
|
||||||
|
|
||||||
for (i = 0; i < DM_ARRAY_SIZE(_features); ++i)
|
for (i = 0; i < DM_ARRAY_SIZE(_features); ++i)
|
||||||
if ((maj > _features[i].maj) ||
|
if ((maj > _features[i].maj) ||
|
||||||
@ -694,8 +698,6 @@ static int _thin_target_present(struct cmd_context *cmd,
|
|||||||
log_very_verbose("Target %s does not support %s.",
|
log_very_verbose("Target %s does not support %s.",
|
||||||
_thin_pool_module,
|
_thin_pool_module,
|
||||||
_features[i].feature);
|
_features[i].feature);
|
||||||
|
|
||||||
_checked = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attributes) {
|
if (attributes) {
|
||||||
@ -704,7 +706,7 @@ static int _thin_target_present(struct cmd_context *cmd,
|
|||||||
if ((cn = find_config_tree_array(cmd, global_thin_disabled_features_CFG, NULL))) {
|
if ((cn = find_config_tree_array(cmd, global_thin_disabled_features_CFG, NULL))) {
|
||||||
for (cv = cn->v; cv; cv = cv->next) {
|
for (cv = cn->v; cv; cv = cv->next) {
|
||||||
if (cv->type != DM_CFG_STRING) {
|
if (cv->type != DM_CFG_STRING) {
|
||||||
log_error("Ignoring invalid string in config file %s.",
|
log_warn("WARNING: Ignoring invalid string in config file %s.",
|
||||||
_lvmconf);
|
_lvmconf);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -45,10 +45,13 @@ static int _zero_target_present(struct cmd_context *cmd,
|
|||||||
static int _zero_checked = 0;
|
static int _zero_checked = 0;
|
||||||
static int _zero_present = 0;
|
static int _zero_present = 0;
|
||||||
|
|
||||||
if (!_zero_checked)
|
if (!activation())
|
||||||
_zero_present = target_present(cmd, "zero", 1);
|
return 0;
|
||||||
|
|
||||||
_zero_checked = 1;
|
if (!_zero_checked) {
|
||||||
|
_zero_checked = 1;
|
||||||
|
_zero_present = target_present(cmd, "zero", 1);
|
||||||
|
}
|
||||||
|
|
||||||
return _zero_present;
|
return _zero_present;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user