mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-17 06:04:23 +03:00
pre-release
This commit is contained in:
parent
9704515c1e
commit
9a5910bdf9
@ -1 +1 @@
|
||||
1.02.91-git (2014-09-01)
|
||||
1.02.91-git (2014-11-11)
|
||||
|
21
WHATS_NEW
21
WHATS_NEW
@ -1,9 +1,9 @@
|
||||
Version 2.02.112 -
|
||||
Version 2.02.112 - 11th November 2014
|
||||
=====================================
|
||||
Add cache_{read,write}_{hits,misses} reporting fields.
|
||||
Add cache_{total,used,dirty}_blocks reporting fields.
|
||||
Add _corig as reserved suffix.
|
||||
Reduce vg write and vg commits when creating spare volumes.
|
||||
Reduce number of VG writes and commits when creating spare volumes.
|
||||
When remove_layer_from_lv() removes layer, restore subLV names.
|
||||
Cache-pool in use becomes invisible LV.
|
||||
Don't prompt for removal of _pmspare in VG without pool metadata LV.
|
||||
@ -15,7 +15,8 @@ Version 2.02.112 -
|
||||
Report some basic percentage info for cache pools.
|
||||
Introduce size_mb_arg_with_percent() for advanced size arg reading.
|
||||
Add extra support for '.' as decimal point in size args.
|
||||
Configurable support for creation of sparse volumes with thin-pools.
|
||||
Add configure parameters for default segment type choices.
|
||||
Add global/sparse_segtype_default setting to use thin for --type sparse.
|
||||
Update and correct lvcreate and lvcovert man pages.
|
||||
Mark pools and snapshots as unzeroable volumes.
|
||||
Check for zeroing of volume after segment type is fully detected.
|
||||
@ -28,13 +29,14 @@ Version 2.02.112 -
|
||||
Query lock holding LV when replacing and converting raid volumes.
|
||||
Add extra validate for locked lv within validate_lv_cache_create().
|
||||
Add internal lvseg_name() function.
|
||||
Skip trying to file lock virtual internal vg name.
|
||||
Skip use of lock files for virtual internal VG names.
|
||||
Fix selection on {vg,lv}_permissions fields to properly match selection criteria.
|
||||
Fix lv_permissions reporting to display read-only{-override} instead of blank.
|
||||
Fix liblvm2cmd and lvm shell to respect quotes around args in cmd line string.
|
||||
Permit extent sizes > 128KB that are not power of 2 with lvm2 format.
|
||||
Remove workaround for lvm2-monitor.service hang on stop if lvmetad stopped.
|
||||
Change vgremove to use process_each_lv_in_vg.
|
||||
Allow lvconvert --repair and --splitmirrors on internal LVs.
|
||||
Introduce WARN_ flags to control some metadata warning messages.
|
||||
Use process_each_pv in vgreduce.
|
||||
Refactor process_each_pv in toollib.
|
||||
@ -47,11 +49,12 @@ Version 2.02.112 -
|
||||
Improve code for creation of cache and cache pool volumes.
|
||||
Check cluster-wide (not local) active status before removing LV.
|
||||
Properly check if activation of removed cached LV really activated.
|
||||
Lvremoving cached LV removes cachepool (keep with lvconvert --splitcache).
|
||||
lvremove cached LV removes cachepool (keep with lvconvert --splitcache).
|
||||
Always remove spare LV with last removed pool volume.
|
||||
Support lvconvert --splitcache and --uncache of cached LV.
|
||||
Option --cache has also shortcut -H (i.e. lvcreate -H).
|
||||
Refactor lvcreate code and better preserve --type argument.
|
||||
Refactor filter processing around lvmetad.
|
||||
Refactor process_each_lv in toollib.
|
||||
Refactor process_each_vg in toollib.
|
||||
Pools cannot be used as external origin.
|
||||
@ -64,6 +67,7 @@ Version 2.02.112 -
|
||||
Unify handling of --persistent option for lvcreate and lvchange.
|
||||
Validate major and minor numbers stored in metadata.
|
||||
Use -fPIE when linking -pie executables.
|
||||
Support DEBUG_MEMLOCK to trap unsupported mmap usage.
|
||||
Enable cache segment type by default.
|
||||
Ensure only supported volume types are used with cache segments.
|
||||
Fix inablility to specify cachemode when 'lvconvert'ing to cache-pool.
|
||||
@ -75,8 +79,6 @@ Version 2.02.112 -
|
||||
Fix cmirror endian conversions.
|
||||
Introduce lv_is_pvmove/locked/converting/merging macros.
|
||||
Avoid leaving linear logical volume when thin pool creation fails.
|
||||
Demote an error to a warning when devices known to lvmetad are filtered out.
|
||||
Re-order filter evaluation, making component filters global.
|
||||
Don't leak alloc_handle on raid target error path.
|
||||
Properly validate raid leg names.
|
||||
Archive metadata before starting their modification in raid target.
|
||||
@ -84,7 +86,10 @@ Version 2.02.112 -
|
||||
Add missing backup of lvm2 metadata after some raid modifications.
|
||||
Use vg memory pool for extent allocation.
|
||||
Add allocation/physical_extent_size config option for default PE size of VGs.
|
||||
Introduce common code to modify metadate and reload updated LV.
|
||||
Demote an error to a warning when devices known to lvmetad are filtered out.
|
||||
Re-order filter evaluation, making component filters global.
|
||||
Fix logic that checks for full scan before iterating through devices.
|
||||
Introduce common code to modify metadata and reload updated LV.
|
||||
Fix rename of active snapshot volume in cluster.
|
||||
Make sure shared libraries are built with RELRO option.
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
Version 1.02.91 -
|
||||
Version 1.02.91 - 11th November 2014
|
||||
====================================
|
||||
Update API for cache creation and dm_config_node to pass policy.
|
||||
Allow activation of any thin-pool with passed transaction_id == 0.
|
||||
Update cache creation and dm_config_node to pass policy.
|
||||
Allow activation of any thin-pool if transaction_id supplied is 0.
|
||||
Don't print uninitialized stack bytes when non-root uses dm_check_version().
|
||||
Fix selection criteria to not match reserved values when using >, <, >=, <.
|
||||
Add DM_LIST_HEAD_INIT macro to libdevmapper.h
|
||||
Add DM_LIST_HEAD_INIT macro to libdevmapper.h.
|
||||
Fix dm_is_dm_major to not issue error about missing /proc lines for dm module.
|
||||
|
||||
Version 1.02.90 - 1st September 2014
|
||||
|
@ -183,7 +183,6 @@ int clog_request_from_network(void *data, size_t data_len)
|
||||
{
|
||||
uint64_t *vp = data;
|
||||
uint64_t version = xlate64(vp[0]);
|
||||
uint64_t unconverted_version = vp[1];
|
||||
struct clog_request *rq = data;
|
||||
|
||||
switch (version) {
|
||||
|
@ -78,7 +78,7 @@ static int _cache_pool_text_import(struct lv_segment *seg,
|
||||
return SEG_LOG_ERROR("Failed to duplicate policy in");
|
||||
} else
|
||||
/* Cannot use 'just' default, so pick one */
|
||||
seg->policy_name = DEFAULT_CACHE_POOL_POLICY; /* TODO: configurable default */
|
||||
seg->policy_name = DEFAULT_CACHE_POOL_POLICY; /* FIXME make configurable */
|
||||
|
||||
/*
|
||||
* Read in policy args:
|
||||
|
@ -88,7 +88,7 @@ static const struct flag _lv_flags[] = {
|
||||
{CACHE_POOL, NULL, 0},
|
||||
{CACHE_POOL_DATA, NULL, 0},
|
||||
{CACHE_POOL_METADATA, NULL, 0},
|
||||
{LV_PENDING_DELETE, NULL, 0}, /* TODO: print as COMPATIBLE_FLAG */
|
||||
{LV_PENDING_DELETE, NULL, 0}, /* FIXME Display like COMPATIBLE_FLAG */
|
||||
{0, NULL, 0}
|
||||
};
|
||||
|
||||
|
@ -23,8 +23,8 @@ typedef int (*query_resource_fn) (const char *resource, int *mode);
|
||||
typedef void (*fin_lock_fn) (void);
|
||||
typedef void (*reset_lock_fn) (void);
|
||||
|
||||
#define LCK_PRE_MEMLOCK 0x00000001 /* Is memlock() needed before calls? */
|
||||
#define LCK_CLUSTERED 0x00000002
|
||||
#define LCK_PRE_MEMLOCK 0x00000001 /* Is memlock() needed before calls? */
|
||||
#define LCK_CLUSTERED 0x00000002
|
||||
#define LCK_SUPPORTS_REMOTE_QUERIES 0x00000004
|
||||
|
||||
struct locking_type {
|
||||
|
@ -27,7 +27,7 @@
|
||||
#define DM_TRANSACTION_OVERHEAD 4096 /* KiB */
|
||||
#define DM_BYTES_PER_BLOCK 16 /* bytes */
|
||||
#define DM_HINT_OVERHEAD_PER_BLOCK 8 /* bytes */
|
||||
#define DM_MAX_HINT_WIDTH (4+16) /* bytes, TODO: configurable ?? */
|
||||
#define DM_MAX_HINT_WIDTH (4+16) /* bytes. FIXME Configurable? */
|
||||
|
||||
const char *get_cache_pool_cachemode_name(const struct lv_segment *seg)
|
||||
{
|
||||
|
@ -863,7 +863,7 @@ static int _lv_is_exclusive(struct logical_volume *lv)
|
||||
struct lv_segment *seg;
|
||||
|
||||
/* Some seg types require exclusive activation */
|
||||
/* TODO: deep-scan of every segtype in use */
|
||||
/* FIXME Scan recursively */
|
||||
dm_list_iterate_items(seg, &lv->segments)
|
||||
if (seg_only_exclusive(seg))
|
||||
return 1;
|
||||
|
@ -6768,11 +6768,11 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
||||
return NULL;
|
||||
}
|
||||
/* Create cache origin for cache pool */
|
||||
/* TODO: eventually support raid/mirrors with -m */
|
||||
/* FIXME Eventually support raid/mirrors with -m */
|
||||
if (!(create_segtype = get_segtype_from_string(vg->cmd, "striped")))
|
||||
return_0;
|
||||
} else if (seg_is_mirrored(lp) || seg_is_raid(lp)) {
|
||||
/* FIXME: this will not pass cluster lock! */
|
||||
/* FIXME This will not pass cluster lock! */
|
||||
init_mirror_in_sync(lp->nosync);
|
||||
|
||||
if (lp->nosync) {
|
||||
@ -6809,11 +6809,11 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
||||
return_NULL;
|
||||
if (origin_lv->status & LVM_WRITE) {
|
||||
log_error("Cannot use writable LV as the external origin.");
|
||||
return NULL; // TODO conversion for inactive
|
||||
return NULL; /* FIXME conversion for inactive */
|
||||
}
|
||||
if (lv_is_active(origin_lv) && !lv_is_external_origin(origin_lv)) {
|
||||
log_error("Cannot use active LV for the external origin.");
|
||||
return NULL; // We can't be sure device is read-only
|
||||
return NULL; /* We can't be sure device is read-only */
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7029,7 +7029,7 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
||||
lv->status |= LV_TEMPORARY;
|
||||
|
||||
if (seg_is_cache(lp)) {
|
||||
/* TODO: support remote exclusive activation? */
|
||||
/* FIXME Support remote exclusive activation? */
|
||||
/* Not yet 'cache' LV, it is stripe volume for wiping */
|
||||
if (is_change_activating(lp->activate) &&
|
||||
!activate_lv_excl_local(cmd, lv)) {
|
||||
@ -7132,7 +7132,7 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
||||
if (origin_lv) {
|
||||
/* Convert origin to cached LV */
|
||||
if (!(tmp_lv = lv_cache_create(lv, origin_lv))) {
|
||||
/* TODO: do a better revert */
|
||||
/* FIXME Do a better revert */
|
||||
log_error("Aborting. Leaving cache pool %s and uncached origin volume %s.",
|
||||
display_lvname(lv), display_lvname(origin_lv));
|
||||
return NULL;
|
||||
@ -7146,7 +7146,7 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
||||
}
|
||||
lv = tmp_lv;
|
||||
if (!lv_update_and_reload(lv)) {
|
||||
/* TODO: do a better revert */
|
||||
/* FIXME Do a better revert */
|
||||
log_error("Aborting. Manual intervention required.");
|
||||
return NULL; /* FIXME: revert */
|
||||
}
|
||||
@ -7186,13 +7186,13 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
|
||||
|
||||
backup(vg);
|
||||
/*
|
||||
* TODO:
|
||||
* We do not actually need snapshot-origin as an active device,
|
||||
* as virtual origin is already 'hidden' private device without
|
||||
* vg/lv links. As such it is not supposed to be used by any user.
|
||||
* Also it would save one dm table entry, but it needs quite a few
|
||||
* changes in the libdm/lvm2 code base to support it.
|
||||
* FIXME We do not actually need snapshot-origin as an active device,
|
||||
* as virtual origin is already 'hidden' private device without
|
||||
* vg/lv links. As such it is not supposed to be used by any user.
|
||||
* Also it would save one dm table entry, but it needs quite a few
|
||||
* changes in the libdm/lvm2 code base to support it.
|
||||
*/
|
||||
|
||||
/* Activate spare snapshot once it is a complete LV */
|
||||
if (!lv_active_change(cmd, origin_lv, lp->activate, 1)) {
|
||||
log_error("Failed to activate sparce volume %s.",
|
||||
|
@ -2547,12 +2547,12 @@ int vg_validate(struct volume_group *vg)
|
||||
|
||||
if (lv_is_pool_metadata_spare(lvl->lv)) {
|
||||
if (++spare_count > 1) {
|
||||
log_error(INTERNAL_ERROR "LV %s is %u. pool metadata spare (>1).",
|
||||
log_error(INTERNAL_ERROR "LV %s is extra pool metadata spare volume. %u found but only 1 allowed.",
|
||||
lvl->lv->name, spare_count);
|
||||
r = 0;
|
||||
}
|
||||
if (vg->pool_metadata_spare_lv != lvl->lv) {
|
||||
log_error(INTERNAL_ERROR "LV %s is not vg pool metadata spare.",
|
||||
log_error(INTERNAL_ERROR "LV %s is not the VG's pool metadata spare volume.",
|
||||
lvl->lv->name);
|
||||
r = 0;
|
||||
}
|
||||
|
@ -552,9 +552,7 @@ int vg_set_alloc_policy(struct volume_group *vg, alloc_policy_t alloc)
|
||||
}
|
||||
|
||||
/*
|
||||
* Switching the cluster attribute make the active volume
|
||||
* exclusively activate
|
||||
* with any active logical volumes.
|
||||
* Setting the cluster attribute marks active volumes exclusive.
|
||||
*
|
||||
* FIXME: resolve logic with reacquiring proper top-level LV locks
|
||||
* and we likely can't giveup DLM locks for active LVs...
|
||||
|
@ -799,8 +799,8 @@ int dm_tree_node_add_cache_target(struct dm_tree_node *node,
|
||||
uint32_t chunk_size);
|
||||
|
||||
/*
|
||||
* TODO: Add individual cache policy pairs <key> = value, like:
|
||||
*int dm_tree_node_add_cache_policy_arg(struct dm_tree_node *dnode,
|
||||
* FIXME Add individual cache policy pairs <key> = value, like:
|
||||
* int dm_tree_node_add_cache_policy_arg(struct dm_tree_node *dnode,
|
||||
* const char *key, uint64_t value);
|
||||
*/
|
||||
|
||||
|
@ -1265,7 +1265,7 @@ static int _check_value_is_reserved(struct dm_report *rh, unsigned type, const v
|
||||
return 1;
|
||||
break;
|
||||
case DM_REPORT_FIELD_TYPE_STRING_LIST:
|
||||
// TODO: add comparison for string list
|
||||
/* FIXME Add comparison for string list */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -675,7 +675,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
|
||||
|
||||
/* Starts basic option validation for every segment type */
|
||||
|
||||
/* TODO: Use these ARGS macros also in commands.h ? */
|
||||
/* FIXME Use these ARGS macros also in commands.h? */
|
||||
/* ARGS are disjoint! sets of options */
|
||||
#define LVCREATE_ARGS \
|
||||
activate_ARG,\
|
||||
@ -783,7 +783,7 @@ static int _lvcreate_params(struct cmd_context *cmd,
|
||||
-1))
|
||||
return_0;
|
||||
|
||||
/* TODO: resolve this ambiguous case with --pooldatasize */
|
||||
/* FIXME Resolve this ambiguous case with --pooldatasize */
|
||||
if (arg_is_set(cmd, thinpool_ARG)) {
|
||||
if (lp->type) {
|
||||
/* Unsupported with --type snapshot */
|
||||
@ -1071,12 +1071,12 @@ static int _determine_cache_argument(struct volume_group *vg,
|
||||
log_error("Change of volume permission is unsupported with cache conversion, use lvchange.");
|
||||
return 0;
|
||||
}
|
||||
/* FIXME: how to handle skip flag */
|
||||
/* FIXME How to handle skip flag? */
|
||||
if (arg_from_list_is_set(cmd, "is unsupported with cache conversion",
|
||||
setactivationskip_ARG,
|
||||
ignoreactivationskip_ARG,
|
||||
-1))
|
||||
return_0; /* TODO FIX THIS */
|
||||
return_0; /* FIXME */
|
||||
|
||||
/* Put origin into resulting activation state first */
|
||||
if (is_change_activating(lp->activate)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user