summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WHATS_NEW24
-rw-r--r--WHATS_NEW_DM1
-rw-r--r--daemons/clvmd/lvm-functions.c35
3 files changed, 33 insertions, 27 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index e4aaba5d..7798c748 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,23 +1,23 @@
Version 2.02.78 -
====================================
- Check str_list_add() success in _add_stripe_seg().
- Check lv_info() success in _mirrored_transient_status().
+ Abort if segment tag allocation fails in pool format _add_stripe_seg.
+ Abort in _mirrored_transient_status if referenced log/image LV is not active.
Add backtraces for dev_set() and dev_close_immediate() errors in set_lv().
- Add logging for unlink() error in clvmd remove_lockfile().
- Add logging for pipe write() and close() error in clvmd child_init_signal().
- Add test for existance of orphan vginfo in _lvmcache_update_vgname().
- Do a full rescan if some device is missing in read_pvs_in_vg().
- Avoid misleading warnings in vgextend --restoremissing in certain cases.
- Add error path stack traces for _process_mapper_dir(), _create_and_load_v4().
- Add missing test for failed pool allocation in write_config_node().
- Replace snprintf with dm_snprintf in clvmd-command.c.
- Check reallocated buffer for NULL before use in clvmd do_command().
+ Log any unlink() error in clvmd remove_lockfile().
+ Log any pipe write() or close() errors in clvmd child_init_signal().
+ Detect if orphan vginfo was lost from cache before _lvmcache_update_vgname().
+ Do a full rescan if some device is missing in lvm1 format read_pvs_in_vg.
+ Add missing check that dm_pool_create succeeded in write_config_node().
+ Use dm_snprintf in clvmd-command.c to ensure an overlong buffer is truncated.
+ Don't write to buffer if its reallocation failed in clvmd do_command().
+ Switch from float to fixed point percentage handling.
+ Avoid misleading missing PV warnings in vgextend --restoremissing.
Fix memory leak when VG allocation policy in metadata is invalid.
Ignore unrecognised allocation policy found in metadata instead of aborting.
Factor out tag printing into _out_tags and avoid leaking string buffer.
Remove some unused variables & assignments.
Add missing vg_release calls in _vg_read_by_vgid.
-Still to fix: LCK_CACHE/CLUSTER_VG printing/FIXME
+ Fix debug logging of derived flag LCK_CACHE in clvmd.
Fix test for no system_dir in _init_backup().
Disallow lvconvert ops that both allocate & free supplied PEs in a single cmd.
Fix liblvm seg_size to give bytes not sectors.
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index 9c324798..a2720f98 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,6 @@
Version 1.02.59 -
====================================
+ Add backtraces to _process_mapper_dir and _create_and_load_v4 error paths.
Remove superfluous checks for NULL before calling dm_free.
Version 1.02.58 - 22nd November 2010
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c
index 7fda9928..5b4a7ee1 100644
--- a/daemons/clvmd/lvm-functions.c
+++ b/daemons/clvmd/lvm-functions.c
@@ -44,11 +44,7 @@ struct lv_info {
int lock_mode;
};
-/*
- * FIXME: 8bit value passed here -
- * so only LCK_XXX defines < 0x100 can be decoded
- */
-static const char *decode_locking_cmd(unsigned char cmdl)
+static const char *decode_full_locking_cmd(uint32_t cmdl)
{
static char buf[128];
const char *type;
@@ -117,11 +113,20 @@ static const char *decode_locking_cmd(unsigned char cmdl)
cmdl & LCK_NONBLOCK ? "|NONBLOCK" : "",
cmdl & LCK_HOLD ? "|HOLD" : "",
cmdl & LCK_LOCAL ? "|LOCAL" : "",
- cmdl & LCK_CLUSTER_VG ? "|CLUSTER_VG" : "");
+ cmdl & LCK_CLUSTER_VG ? "|CLUSTER_VG" : "",
+ cmdl & LCK_CACHE ? "|CACHE" : "");
return buf;
}
+/*
+ * Only processes 8 bits: excludes LCK_CACHE.
+ */
+static const char *decode_locking_cmd(unsigned char cmdl)
+{
+ return decode_full_locking_cmd((uint32_t) cmdl);
+}
+
static const char *decode_flags(unsigned char flags)
{
static char buf[128];
@@ -676,15 +681,6 @@ void do_lock_vg(unsigned char command, unsigned char lock_flags, char *resource)
uint32_t lock_cmd = command;
char *vgname = resource + 2;
- DEBUGLOG("do_lock_vg: resource '%s', cmd = %s, flags = %s, memlock = %d\n",
- resource, decode_locking_cmd(command), decode_flags(lock_flags), memlock());
-
- /* P_#global causes a full cache refresh */
- if (!strcmp(resource, "P_" VG_GLOBAL)) {
- do_refresh_cache();
- return;
- }
-
lock_cmd &= (LCK_SCOPE_MASK | LCK_TYPE_MASK | LCK_HOLD);
/*
@@ -693,6 +689,15 @@ void do_lock_vg(unsigned char command, unsigned char lock_flags, char *resource)
if (strncmp(resource, "P_#", 3) && !strncmp(resource, "P_", 2))
lock_cmd |= LCK_CACHE;
+ DEBUGLOG("do_lock_vg: resource '%s', cmd = %s, flags = %s, memlock = %d\n",
+ resource, decode_full_locking_cmd(lock_cmd), decode_flags(lock_flags), memlock());
+
+ /* P_#global causes a full cache refresh */
+ if (!strcmp(resource, "P_" VG_GLOBAL)) {
+ do_refresh_cache();
+ return;
+ }
+
pthread_mutex_lock(&lvm_lock);
switch (lock_cmd) {
case LCK_VG_COMMIT: