public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
* LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr ...
@ 2006-05-11 19:45 agk
0 siblings, 0 replies; 6+ messages in thread
From: agk @ 2006-05-11 19:45 UTC (permalink / raw)
To: lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk@sourceware.org 2006-05-11 19:45:53
Modified files:
. : WHATS_NEW
dmeventd/mirror: dmeventd_mirror.c
doc : example.conf
lib/config : defaults.h
lib/metadata : mirror.c
Log message:
Add mirror log fault-handling policy.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.383&r2=1.384
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/doc/example.conf.diff?cvsroot=lvm2&r1=1.23&r2=1.24
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/defaults.h.diff?cvsroot=lvm2&r1=1.25&r2=1.26
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.28&r2=1.29
^ permalink raw reply [flat|nested] 6+ messages in thread
* LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr ...
@ 2008-01-31 12:19 agk
0 siblings, 0 replies; 6+ messages in thread
From: agk @ 2008-01-31 12:19 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk@sourceware.org 2008-01-31 12:19:36
Modified files:
. : WHATS_NEW
dmeventd/mirror: dmeventd_mirror.c
dmeventd/snapshot: dmeventd_snapshot.c
lib/activate : activate.c
lib/filters : filter-md.c
lib/metadata : mirror.c
lib/mirror : mirrored.c
lib/report : report.c
lib/snapshot : snapshot.c
tools : lvm-static.c lvm.c lvm2cmd.c
Added files:
test : t-mirror-names.sh
Log message:
Fix mirror log name construction during lvconvert. (2.02.30)
Make monitor_dev_for_events recurse through the stack of LVs.
Clean up some more compiler warnings.
Add mirror names test script.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.784&r2=1.785
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.18&r2=1.19
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/snapshot/dmeventd_snapshot.c.diff?cvsroot=lvm2&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.c.diff?cvsroot=lvm2&r1=1.132&r2=1.133
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter-md.c.diff?cvsroot=lvm2&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/mirror.c.diff?cvsroot=lvm2&r1=1.68&r2=1.69
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mirror/mirrored.c.diff?cvsroot=lvm2&r1=1.51&r2=1.52
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/report/report.c.diff?cvsroot=lvm2&r1=1.75&r2=1.76
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/snapshot/snapshot.c.diff?cvsroot=lvm2&r1=1.28&r2=1.29
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-mirror-names.sh.diff?cvsroot=lvm2&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvm-static.c.diff?cvsroot=lvm2&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvm.c.diff?cvsroot=lvm2&r1=1.104&r2=1.105
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvm2cmd.c.diff?cvsroot=lvm2&r1=1.3&r2=1.4
--- LVM2/WHATS_NEW 2008/01/30 13:59:56 1.784
+++ LVM2/WHATS_NEW 2008/01/31 12:19:34 1.785
@@ -1,5 +1,8 @@
Version 2.02.33 -
===================================
+ Fix mirror log name construction during lvconvert. (2.02.30)
+ Make monitor_dev_for_events recurse through the stack of LVs.
+ Clean up some more compiler warnings.
Some whitespace tidy-ups.
Use stack return macros throughout.
Rely upon internally-cached PV labels while corresponding VG lock is held.
--- LVM2/dmeventd/mirror/dmeventd_mirror.c 2007/04/27 17:46:16 1.18
+++ LVM2/dmeventd/mirror/dmeventd_mirror.c 2008/01/31 12:19:35 1.19
@@ -125,8 +125,9 @@
return ME_IGNORE;
}
-static void _temporary_log_fn(int level, const char *file,
- int line, const char *format)
+static void _temporary_log_fn(int level, const char *file __attribute((unused)),
+ int line __attribute((unused)),
+ const char *format)
{
if (!strncmp(format, "WARNING: ", 9) && (level < 5))
syslog(LOG_CRIT, "%s", format);
@@ -164,7 +165,8 @@
return (r == 1) ? 0 : -1;
}
-void process_event(struct dm_task *dmt, enum dm_event_mask event,
+void process_event(struct dm_task *dmt,
+ enum dm_event_mask event __attribute((unused)),
void **unused __attribute((unused)))
{
void *next = NULL;
@@ -222,8 +224,11 @@
pthread_mutex_unlock(&_event_mutex);
}
-int register_device(const char *device, const char *uuid, int major, int minor,
- void **unused __attribute((unused)))
+int register_device(const char *device,
+ const char *uuid __attribute((unused)),
+ int major __attribute((unused)),
+ int minor __attribute((unused)),
+ void **unused __attribute((unused)))
{
int r = 0;
@@ -259,8 +264,11 @@
return r;
}
-int unregister_device(const char *device, const char *uuid, int major, int minor,
- void **unused __attribute((unused)))
+int unregister_device(const char *device,
+ const char *uuid __attribute((unused)),
+ int major __attribute((unused)),
+ int minor __attribute((unused)),
+ void **unused __attribute((unused)))
{
pthread_mutex_lock(&_register_mutex);
--- LVM2/dmeventd/snapshot/dmeventd_snapshot.c 2008/01/09 15:32:19 1.1
+++ LVM2/dmeventd/snapshot/dmeventd_snapshot.c 2008/01/31 12:19:35 1.2
@@ -54,8 +54,10 @@
*/
static pthread_mutex_t _event_mutex = PTHREAD_MUTEX_INITIALIZER;
-static void _temporary_log_fn(int level, const char *file,
- int line, const char *format)
+static void _temporary_log_fn(int level,
+ const char *file __attribute((unused)),
+ int line __attribute((unused)),
+ const char *format)
{
if (!strncmp(format, "WARNING: ", 9) && (level < 5))
syslog(LOG_CRIT, "%s", format);
@@ -115,7 +117,8 @@
dm_event_handler_destroy(dmevh);
}
-void process_event(struct dm_task *dmt, enum dm_event_mask event,
+void process_event(struct dm_task *dmt,
+ enum dm_event_mask event __attribute((unused)),
void **private)
{
void *next = NULL;
@@ -161,8 +164,11 @@
pthread_mutex_unlock(&_event_mutex);
}
-int register_device(const char *device, const char *uuid, int major, int minor,
- void **private)
+int register_device(const char *device,
+ const char *uuid __attribute((unused)),
+ int major __attribute((unused)),
+ int minor __attribute((unused)),
+ void **private)
{
int r = 0;
int *percent_warning = (int*)private;
@@ -201,8 +207,11 @@
return r;
}
-int unregister_device(const char *device, const char *uuid, int major, int minor,
- void **unused __attribute((unused)))
+int unregister_device(const char *device,
+ const char *uuid __attribute((unused)),
+ int major __attribute((unused)),
+ int minor __attribute((unused)),
+ void **unused __attribute((unused)))
{
pthread_mutex_lock(&_register_mutex);
--- LVM2/lib/activate/activate.c 2008/01/30 13:59:57 1.132
+++ LVM2/lib/activate/activate.c 2008/01/31 12:19:35 1.133
@@ -679,6 +679,7 @@
struct list *tmp, *snh, *snht;
struct lv_segment *seg;
int (*monitor_fn) (struct lv_segment *s, int e);
+ uint32_t s;
/* skip dmeventd code altogether */
if (dmeventd_monitor_mode() == DMEVENTD_MONITOR_IGNORE)
@@ -715,6 +716,19 @@
list_iterate(tmp, &lv->segments) {
seg = list_item(tmp, struct lv_segment);
+ /* Recurse for AREA_LV */
+ for (s = 0; s < seg->area_count; s++) {
+ if (seg_type(seg, s) != AREA_LV)
+ continue;
+ if (!monitor_dev_for_events(cmd, seg_lv(seg, s),
+ monitor)) {
+ log_error("Failed to %smonitor %s",
+ monitor ? "" : "un",
+ seg_lv(seg, s)->name);
+ r = 0;
+ }
+ }
+
if (!seg_monitored(seg) || (seg->status & PVMOVE))
continue;
--- LVM2/lib/filters/filter-md.c 2007/08/20 20:55:25 1.7
+++ LVM2/lib/filters/filter-md.c 2008/01/31 12:19:35 1.8
@@ -19,7 +19,8 @@
#ifdef linux
-static int _ignore_md(struct dev_filter *f, struct device *dev)
+static int _ignore_md(struct dev_filter *f __attribute((unused)),
+ struct device *dev)
{
int ret;
--- LVM2/lib/metadata/mirror.c 2008/01/30 14:00:00 1.68
+++ LVM2/lib/metadata/mirror.c 2008/01/31 12:19:35 1.69
@@ -1182,7 +1182,7 @@
return NULL;
}
- if (dm_snprintf(log_name, len, "%s%s", lv->name, suffix) < 0) {
+ if (dm_snprintf(log_name, len, "%s%s", lv_name, suffix) < 0) {
log_error("log_name allocation failed.");
return NULL;
}
@@ -1207,7 +1207,9 @@
int in_sync)
{
struct logical_volume *log_lv;
- const char *suffix;
+ const char *suffix, *c;
+ char *lv_name;
+ size_t len;
struct lv_segment *seg;
init_mirror_in_sync(in_sync);
@@ -1217,15 +1219,34 @@
return NULL;
}
- /* Check if the log is for temporary sync layer. */
+ /* Mirror log name is lv_name + suffix, determined as the following:
+ * 1. suffix is:
+ * o "_mlog" for the original mirror LV.
+ * o "_mlogtmp_%d" for temporary mirror LV,
+ * 2. lv_name is:
+ * o lv->name, if the log is temporary
+ * o otherwise, the top-level LV name
+ */
seg = first_seg(lv);
if (seg_type(seg, 0) == AREA_LV &&
- strstr(seg_lv(seg, 0)->name, MIRROR_SYNC_LAYER))
+ strstr(seg_lv(seg, 0)->name, MIRROR_SYNC_LAYER)) {
+ lv_name = lv->name;
suffix = "_mlogtmp_%d";
- else
+ } else if ((c = strstr(lv->name, MIRROR_SYNC_LAYER))) {
+ len = c - lv->name + 1;
+ if (!(lv_name = alloca(len)) ||
+ !dm_snprintf(lv_name, len, "%s", lv->name)) {
+ log_error("mirror log name allocation failed");
+ return 0;
+ }
+ suffix = "_mlog";
+ } else {
+ lv_name = lv->name;
suffix = "_mlog";
+ }
- if (!(log_lv = _create_mirror_log(lv, ah, alloc, lv->name, suffix))) {
+ if (!(log_lv = _create_mirror_log(lv, ah, alloc,
+ (const char *) lv_name, suffix))) {
log_error("Failed to create mirror log.");
return NULL;
}
--- LVM2/lib/mirror/mirrored.c 2008/01/30 14:00:00 1.51
+++ LVM2/lib/mirror/mirrored.c 2008/01/31 12:19:35 1.52
@@ -456,7 +456,8 @@
}
/* FIXME This gets run while suspended and performs banned operations. */
-static int _target_set_events(struct lv_segment *seg, int evmask, int set)
+static int _target_set_events(struct lv_segment *seg,
+ int evmask __attribute((unused)), int set)
{
char *dso, *name;
struct logical_volume *lv;
--- LVM2/lib/report/report.c 2008/01/30 14:00:00 1.75
+++ LVM2/lib/report/report.c 2008/01/31 12:19:36 1.76
@@ -1049,7 +1049,7 @@
#define STR DM_REPORT_FIELD_TYPE_STRING
#define NUM DM_REPORT_FIELD_TYPE_NUMBER
-#define FIELD(type, strct, sorttype, head, field, width, func, id, desc) {type, sorttype, (off_t)((void *)&_dummy._ ## strct.field - (void *)&_dummy._ ## strct), width, id, head, &_ ## func ## _disp, desc},
+#define FIELD(type, strct, sorttype, head, field, width, func, id, desc) {type, sorttype, (off_t)((uintptr_t)&_dummy._ ## strct.field - (uintptr_t)&_dummy._ ## strct), width, id, head, &_ ## func ## _disp, desc},
static struct dm_report_field_type _fields[] = {
#include "columns.h"
--- LVM2/lib/snapshot/snapshot.c 2008/01/30 14:00:01 1.28
+++ LVM2/lib/snapshot/snapshot.c 2008/01/31 12:19:36 1.29
@@ -213,7 +213,8 @@
}
/* FIXME This gets run while suspended and performs banned operations. */
-static int _target_set_events(struct lv_segment *seg, int events, int set)
+static int _target_set_events(struct lv_segment *seg,
+ int events __attribute((unused)), int set)
{
char *dso, *name;
struct volume_group *vg = seg->lv->vg;
/cvs/lvm2/LVM2/test/t-mirror-names.sh,v --> standard output
revision 1.1
--- LVM2/test/t-mirror-names.sh
+++ - 2008-01-31 12:19:37.979503000 +0000
@@ -0,0 +1,206 @@
+#!/bin/sh
+# Copyright (C) 2007-2008 Red Hat, Inc. All rights reserved.
+# Copyright (C) 2007-2008 NEC Corporation
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+test_description="check namings of mirrored LV"
+privileges_required_=1
+
+. ./test-lib.sh
+
+dmsetup_has_dm_devdir_support_ ||
+{
+ say "Your version of dmsetup lacks support for changing DM_DEVDIR."
+ say "Skipping this test"
+ exit 0
+}
+
+cleanup_()
+{
+ test -n "$vg" && {
+ lvremove -ff $vg
+ vgremove $vg
+ } > /dev/null
+ test -n "$pvs" && {
+ pvremove $pvs > /dev/null
+ for d in $pvs; do
+ dmsetup remove $(basename $d)
+ done
+ }
+ losetup -d $lodev
+ rm -f $lofile
+}
+
+# ---------------------------------------------------------------------
+# config
+
+nr_pvs=5
+pvsize=$((80 * 1024 * 2))
+
+vg=mirror-names-vg-$$
+lv1=lv1
+lv2=lv2
+
+# ---------------------------------------------------------------------
+# Utilities
+
+pv_()
+{
+ echo "$G_dev_/mapper/pv$1"
+}
+
+lv_devices_()
+{
+ local d
+ local lv=$1
+ shift
+ local devices=$*
+
+ local devs=$(lvs -a -odevices --noheadings $lv | sed 's/([0-9]*)//g' |
+ sed 's/ //g' | sed 's/,/ /g')
+
+ for d in $devs; do
+ (echo $devices | grep -q $d) || return 1
+ devices=$(echo $devices | sed "s/$d//")
+ done
+
+ [ "$(echo $devices | sed 's/ //g')" = "" ]
+}
+
+lv_mirror_log_()
+{
+ local lv=$1
+
+ echo $(lvs -a -omirror_log --noheadings $lv | sed 's/ //g')
+}
+
+lv_convert_lv_()
+{
+ local lv=$1
+
+ echo $(lvs -a -oconvert_lv --noheadings $lv | sed 's/ //g')
+}
+
+# ---------------------------------------------------------------------
+# Initialize PVs and VGs
+
+test_expect_success \
+ 'set up temp file and loopback device' \
+ 'lofile=$(pwd)/lofile && lodev=$(loop_setup_ "$lofile")'
+
+offset=0
+pvs=
+for n in $(seq 1 $nr_pvs); do
+ test_expect_success \
+ "create pv$n" \
+ 'echo "0 $pvsize linear $lodev $offset" > in &&
+ dmsetup create pv$n < in'
+ offset=$(($offset + $pvsize))
+done
+
+for n in $(seq 1 $nr_pvs); do
+ pvs="$pvs $(pv_ $n)"
+done
+
+test_expect_success \
+ "Run this: pvcreate $pvs" \
+ 'pvcreate $pvs'
+
+test_expect_success \
+ 'set up a VG' \
+ 'vgcreate $vg $pvs'
+
+# ---------------------------------------------------------------------
+# Common environment setup/cleanup for each sub testcases
+
+prepare_lvs_()
+{
+ lvremove -ff $vg;
+ :
+}
+
+check_and_cleanup_lvs_()
+{
+ lvs -a -o+devices $vg &&
+ lvremove -ff $vg
+}
+
+test_expect_success "check environment setup/cleanup" \
+ 'prepare_lvs_ &&
+ check_and_cleanup_lvs_'
+
+# ---------------------------------------------------------------------
+# basic
+
+test_expect_success "init: lvcreate" "prepare_lvs_"
+
+test_expect_success "mirror images are ${lv1}_mimage_x" \
+ 'lvcreate -l2 -m1 -n $lv1 $vg &&
+ lv_devices_ $vg/$lv1 "$lv1"_mimage_0 "$lv1"_mimage_1'
+
+test_expect_success "mirror log is ${lv1}_mlog" \
+ 'lv_mirror_log_ $vg/$lv1 "$lv1"_mlog'
+
+test_expect_success "cleanup" "check_and_cleanup_lvs_"
+
+# ---------------------------------------------------------------------
+# lvrename
+
+test_expect_success "init: lvrename" "prepare_lvs_"
+
+test_expect_success "renamed mirror names: $lv1 to $lv2" \
+ 'lvcreate -l2 -m1 -n $lv1 $vg &&
+ lvrename $vg/$lv1 $vg/$lv2 &&
+ lv_devices_ $vg/$lv2 "$lv2"_mimage_0 "$lv2"_mimage_1 &&
+ lv_mirror_log_ $vg/$lv2 "$lv2"_mlog'
+
+test_expect_success "cleanup" "check_and_cleanup_lvs_"
+
+# ---------------------------------------------------------------------
+# lvconvert
+
+test_expect_success "init: lvconvert" "prepare_lvs_"
+
+test_expect_success "converting mirror names is ${lv1}_mimagetmp_2" \
+ 'lvcreate -l2 -m1 -n $lv1 $vg &&
+ lvconvert -m+1 -i1000 -b $vg/$lv1 &&
+ convlv=$(lv_convert_lv_ "$vg/$lv1") &&
+ test "$convlv" = "$lv1"_mimagetmp_2 &&
+ lv_devices_ $vg/$lv1 "$convlv" "$lv1"_mimage_2 &&
+ lv_devices_ "$vg/$convlv" "$lv1"_mimage_0 "$lv1"_mimage_1 &&
+ loglv=$(lv_mirror_log_ "$vg/$convlv") &&
+ test "$loglv" = "$lv1"_mlog'
+
+test_expect_success "mirror log name after re-adding is ${lv1}_mlog" \
+ 'lvconvert --mirrorlog core $vg/$lv1 &&
+ lvconvert --mirrorlog disk $vg/$lv1 &&
+ convlv=$(lv_convert_lv_ "$vg/$lv1") &&
+ lv_devices_ $vg/$lv1 "$convlv" "$lv1"_mimage_2 &&
+ lv_devices_ "$vg/$convlv" "$lv1"_mimage_0 "$lv1"_mimage_1 &&
+ loglv=$(lv_mirror_log_ "$vg/$convlv") &&
+ test "$loglv" = "$lv1"_mlog'
+
+test_expect_success "renamed converting mirror names: $lv1 to $lv2" \
+ 'lvrename $vg/$lv1 $vg/$lv2 &&
+ convlv=$(lv_convert_lv_ "$vg/$lv2") &&
+ lv_devices_ $vg/$lv2 "$convlv" "$lv2"_mimage_2 &&
+ lv_devices_ "$vg/$convlv" "$lv2"_mimage_0 "$lv2"_mimage_1 &&
+ loglv=$(lv_mirror_log_ "$vg/$convlv") &&
+ test "$loglv" = "$lv2"_mlog'
+
+test_expect_success "cleanup" "check_and_cleanup_lvs_"
+
+# Temporary mirror log should have "_mlogtmp_<n>" suffix
+# but currently lvconvert doesn't have an option to add the log.
+# If such feature is added in future, a test for that should
+# be added.
+
+# ---------------------------------------------------------------------
+test_done
--- LVM2/tools/lvm-static.c 2008/01/30 14:00:01 1.4
+++ LVM2/tools/lvm-static.c 2008/01/31 12:19:36 1.5
@@ -20,7 +20,8 @@
return lvm2_main(argc, argv, 1);
}
-int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline)
+int lvm_shell(struct cmd_context *cmd __attribute((unused)),
+ struct cmdline_context *cmdline __attribute((unused)))
{
return 0;
}
--- LVM2/tools/lvm.c 2008/01/30 14:00:02 1.104
+++ LVM2/tools/lvm.c 2008/01/31 12:19:36 1.105
@@ -121,7 +121,8 @@
}
/* Custom completion function */
-static char **_completion(const char *text, int start_pos, int end_pos)
+static char **_completion(const char *text, int start_pos,
+ int end_pos __attribute((unused)))
{
char **match_list = NULL;
int p = 0;
--- LVM2/tools/lvm2cmd.c 2007/08/20 20:55:30 1.3
+++ LVM2/tools/lvm2cmd.c 2008/01/31 12:19:36 1.4
@@ -20,7 +20,8 @@
return cmdlib_lvm2_init(0);
}
-int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline)
+int lvm_shell(struct cmd_context *cmd __attribute((unused)),
+ struct cmdline_context *cmdline __attribute((unused)))
{
return 0;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr ...
@ 2007-01-15 18:22 agk
0 siblings, 0 replies; 6+ messages in thread
From: agk @ 2007-01-15 18:22 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk@sourceware.org 2007-01-15 18:22:02
Modified files:
. : WHATS_NEW
dmeventd/mirror: dmeventd_mirror.c
lib/mirror : mirrored.c
Log message:
Some libdevmapper-event interface changes.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.540&r2=1.541
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.14&r2=1.15
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mirror/mirrored.c.diff?cvsroot=lvm2&r1=1.39&r2=1.40
--- LVM2/WHATS_NEW 2007/01/12 20:38:29 1.540
+++ LVM2/WHATS_NEW 2007/01/15 18:22:01 1.541
@@ -1,5 +1,6 @@
Version 2.02.19 -
===================================
+ Some libdevmapper-event interface changes.
Report dmeventd mirror monitoring status.
Fix dmeventd mirror status line processing.
--- LVM2/dmeventd/mirror/dmeventd_mirror.c 2007/01/12 20:38:29 1.14
+++ LVM2/dmeventd/mirror/dmeventd_mirror.c 2007/01/15 18:22:01 1.15
@@ -164,7 +164,7 @@
return (r == 1) ? 0 : -1;
}
-void process_event(struct dm_task *dmt, enum dm_event_type event)
+void process_event(struct dm_task *dmt, enum dm_event_mask event)
{
void *next = NULL;
uint64_t start, length;
--- LVM2/lib/mirror/mirrored.c 2007/01/12 20:38:30 1.39
+++ LVM2/lib/mirror/mirrored.c 2007/01/15 18:22:02 1.40
@@ -393,7 +393,7 @@
char *dso, *name;
struct logical_volume *lv;
struct volume_group *vg;
- enum dm_event_type events = 0;
+ enum dm_event_mask evmask = 0;
lv = seg->lv;
vg = lv->vg;
@@ -407,27 +407,27 @@
if (!(name = build_dm_name(vg->cmd->mem, vg->name, lv->name, NULL)))
return_0;
- if (!dm_event_get_registered_device(&dso, &name, &events, 0))
+ if (!dm_event_get_registered_device(&dso, &name, &evmask, 0))
return 0;
- if (events & DM_EVENT_REGISTRATION_PENDING) {
+ if (evmask & DM_EVENT_REGISTRATION_PENDING) {
*pending = 1;
- events &= ~DM_EVENT_REGISTRATION_PENDING;
+ evmask &= ~DM_EVENT_REGISTRATION_PENDING;
}
- return events;
+ return evmask;
}
/* FIXME This gets run while suspended and performs banned operations. */
/* FIXME Merge these two functions */
static int _target_register_events(struct cmd_context *cmd,
struct lv_segment *seg,
- int events)
+ int evmask)
{
char *dso, *name;
struct logical_volume *lv;
struct volume_group *vg;
- struct dm_event_handler *handler;
+ struct dm_event_handler *dmevh;
lv = seg->lv;
vg = lv->vg;
@@ -440,17 +440,17 @@
if (!(name = build_dm_name(cmd->mem, vg->name, lv->name, NULL)))
return_0;
- if (!(handler = dm_event_handler_create()))
+ if (!(dmevh = dm_event_handler_create()))
return_0;
- dm_event_handler_set_dso(handler, dso);
- dm_event_handler_set_name(handler, name);
- dm_event_handler_set_events(handler, DM_EVENT_ALL_ERRORS);
- if (!dm_event_register(handler)) {
- dm_event_handler_destroy(handler);
+ dm_event_handler_set_dso(dmevh, dso);
+ dm_event_handler_set_devname(dmevh, name);
+ dm_event_handler_set_event_mask(dmevh, DM_EVENT_ALL_ERRORS);
+ if (!dm_event_register_handler(dmevh)) {
+ dm_event_handler_destroy(dmevh);
return_0;
}
- dm_event_handler_destroy(handler);
+ dm_event_handler_destroy(dmevh);
log_info("Registered %s for events", name);
@@ -459,13 +459,13 @@
static int _target_unregister_events(struct cmd_context *cmd,
struct lv_segment *seg,
- int events)
+ int evmask)
{
char *dso;
char *name;
struct logical_volume *lv;
struct volume_group *vg;
- struct dm_event_handler *handler;
+ struct dm_event_handler *dmevh;
lv = seg->lv;
vg = lv->vg;
@@ -477,17 +477,17 @@
if (!(name = build_dm_name(cmd->mem, vg->name, lv->name, NULL)))
return_0;
- if (!(handler = dm_event_handler_create()))
+ if (!(dmevh = dm_event_handler_create()))
return_0;
- dm_event_handler_set_dso(handler, dso);
- dm_event_handler_set_name(handler, name);
- dm_event_handler_set_events(handler, DM_EVENT_ALL_ERRORS);
- if (!dm_event_unregister(handler)) {
- dm_event_handler_destroy(handler);
+ dm_event_handler_set_dso(dmevh, dso);
+ dm_event_handler_set_devname(dmevh, name);
+ dm_event_handler_set_event_mask(dmevh, DM_EVENT_ALL_ERRORS);
+ if (!dm_event_unregister_handler(dmevh)) {
+ dm_event_handler_destroy(dmevh);
return_0;
}
- dm_event_handler_destroy(handler);
+ dm_event_handler_destroy(dmevh);
log_info("Unregistered %s for events", name);
^ permalink raw reply [flat|nested] 6+ messages in thread
* LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr ...
@ 2007-01-11 22:24 agk
0 siblings, 0 replies; 6+ messages in thread
From: agk @ 2007-01-11 22:24 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk@sourceware.org 2007-01-11 22:24:32
Modified files:
. : WHATS_NEW
dmeventd/mirror: dmeventd_mirror.c
lib/mirror : mirrored.c
Log message:
updated dmeventd interface
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.536&r2=1.537
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/mirror/mirrored.c.diff?cvsroot=lvm2&r1=1.37&r2=1.38
--- LVM2/WHATS_NEW 2007/01/11 19:52:06 1.536
+++ LVM2/WHATS_NEW 2007/01/11 22:24:31 1.537
@@ -1,5 +1,6 @@
Version 2.02.18 -
====================================
+ Revised libdevmapper-event interface for dmeventd.
Remove dmeventd mirror status line word limit.
Use CFLAGS when linking so mixed sparc builds can supply -m64.
Prevent permission changes on active mirrors.
--- LVM2/dmeventd/mirror/dmeventd_mirror.c 2007/01/11 20:11:19 1.12
+++ LVM2/dmeventd/mirror/dmeventd_mirror.c 2007/01/11 22:24:31 1.13
@@ -161,34 +161,18 @@
return (r == 1) ? 0 : -1;
}
-void process_event(const char *device, enum dm_event_type event)
+void process_event(struct dm_task *dmt, enum dm_event_type event)
{
- struct dm_task *dmt;
void *next = NULL;
uint64_t start, length;
char *target_type = NULL;
char *params;
+ const char *device = dm_task_get_name(dmt);
if (pthread_mutex_trylock(&_event_mutex)) {
syslog(LOG_NOTICE, "Another thread is handling an event. Waiting...");
pthread_mutex_lock(&_event_mutex);
}
- /* FIXME Move inside libdevmapper */
- if (!(dmt = dm_task_create(DM_DEVICE_STATUS))) {
- syslog(LOG_ERR, "Unable to create dm_task.\n");
- goto fail;
- }
-
- if (!dm_task_set_name(dmt, device)) {
- syslog(LOG_ERR, "Unable to set device name.\n");
- goto fail;
- }
-
- if (!dm_task_run(dmt)) {
- syslog(LOG_ERR, "Unable to run task.\n");
- goto fail;
- }
-
do {
next = dm_get_next_target(dmt, next, &start, &length,
&target_type, ¶ms);
@@ -226,24 +210,21 @@
case ME_IGNORE:
break;
default:
- /* FIXME Wrong: it can also return -E2BIG but it's never used! */
+ /* FIXME Provide value then! */
syslog(LOG_INFO, "Unknown event received.\n");
}
} while (next);
- fail:
- if (dmt)
- dm_task_destroy(dmt);
pthread_mutex_unlock(&_event_mutex);
}
-int register_device(const char *device)
+int register_device(const char *device, const char *uuid, int major, int minor)
{
int r = 0;
pthread_mutex_lock(&_register_mutex);
- syslog(LOG_INFO, "Monitoring mirror device, %s for events\n", device);
+ syslog(LOG_INFO, "Monitoring mirror device %s for events\n", device);
/*
* Need some space for allocations. 1024 should be more
@@ -273,10 +254,13 @@
return r;
}
-int unregister_device(const char *device)
+int unregister_device(const char *device, const char *uuid, int major, int minor)
{
pthread_mutex_lock(&_register_mutex);
+ syslog(LOG_INFO, "No longer monitoring mirror device %s for events\n",
+ device);
+
if (!--_register_count) {
dm_pool_destroy(_mem_pool);
_mem_pool = NULL;
--- LVM2/lib/mirror/mirrored.c 2006/10/18 18:01:52 1.37
+++ LVM2/lib/mirror/mirrored.c 2007/01/11 22:24:32 1.38
@@ -397,6 +397,7 @@
char *dso, *name;
struct logical_volume *lv;
struct volume_group *vg;
+ struct dm_event_handler *handler;
lv = seg->lv;
vg = lv->vg;
@@ -409,10 +410,18 @@
if (!(name = build_dm_name(vg->cmd->mem, vg->name, lv->name, NULL)))
return_0;
- /* FIXME Save a returned handle here so we can unregister it later */
- if (!dm_event_register(dso, name, DM_EVENT_ALL_ERRORS))
+ if (!(handler = dm_event_handler_create()))
return_0;
+ dm_event_handler_set_dso(handler, dso);
+ dm_event_handler_set_name(handler, name);
+ dm_event_handler_set_events(handler, DM_EVENT_ALL_ERRORS);
+ if (!dm_event_register(handler)) {
+ dm_event_handler_destroy(handler);
+ return_0;
+ }
+ dm_event_handler_destroy(handler);
+
log_info("Registered %s for events", name);
return 1;
@@ -425,6 +434,7 @@
char *name;
struct logical_volume *lv;
struct volume_group *vg;
+ struct dm_event_handler *handler;
lv = seg->lv;
vg = lv->vg;
@@ -436,10 +446,18 @@
if (!(name = build_dm_name(vg->cmd->mem, vg->name, lv->name, NULL)))
return_0;
- /* FIXME Use handle returned by registration function instead of dso */
- if (!dm_event_unregister(dso, name, DM_EVENT_ALL_ERRORS))
+ if (!(handler = dm_event_handler_create()))
return_0;
+ dm_event_handler_set_dso(handler, dso);
+ dm_event_handler_set_name(handler, name);
+ dm_event_handler_set_events(handler, DM_EVENT_ALL_ERRORS);
+ if (!dm_event_unregister(handler)) {
+ dm_event_handler_destroy(handler);
+ return_0;
+ }
+ dm_event_handler_destroy(handler);
+
log_info("Unregistered %s for events", name);
return 1;
^ permalink raw reply [flat|nested] 6+ messages in thread
* LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr ...
@ 2007-01-08 14:24 agk
0 siblings, 0 replies; 6+ messages in thread
From: agk @ 2007-01-08 14:24 UTC (permalink / raw)
To: lvm-devel, lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk@sourceware.org 2007-01-08 14:24:20
Modified files:
. : WHATS_NEW
dmeventd/mirror: dmeventd_mirror.c
tools : lvmcmdlib.c
Log message:
Add dmeventd_mirror register_mutex, tidy initialisation & add memlock.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.526&r2=1.527
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvmcmdlib.c.diff?cvsroot=lvm2&r1=1.2&r2=1.3
--- LVM2/WHATS_NEW 2007/01/05 15:53:40 1.526
+++ LVM2/WHATS_NEW 2007/01/08 14:24:20 1.527
@@ -1,5 +1,6 @@
Version 2.02.18 -
====================================
+ Add dmeventd_mirror register_mutex, tidy initialisation & add memlock.
Fix create mirror with name longer than 22 chars.
Fix some activate.c prototypes when compiled without devmapper.
Fix dmeventd mirror to cope if monitored device disappears.
--- LVM2/dmeventd/mirror/dmeventd_mirror.c 2006/12/20 14:34:05 1.9
+++ LVM2/dmeventd/mirror/dmeventd_mirror.c 2007/01/08 14:24:20 1.10
@@ -32,19 +32,30 @@
#define ME_INSYNC 1
#define ME_FAILURE 2
-static pthread_mutex_t _lock = PTHREAD_MUTEX_INITIALIZER;
-
-/* FIXME: We may need to lock around operations to these */
+/*
+ * register_device() is called first and performs initialisation.
+ * Only one device may be registered or unregistered at a time.
+ */
+static pthread_mutex_t _register_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/*
+ * Number of active registrations.
+ */
static int _register_count = 0;
-/* FIXME Unsafe static? */
static struct dm_pool *_mem_pool = NULL;
+static void *_lvm_handle = NULL;
+
+/*
+ * Currently only one event can be processed at a time.
+ */
+static pthread_mutex_t _event_mutex = PTHREAD_MUTEX_INITIALIZER;
static int _get_mirror_event(char *params)
{
int i, r = ME_INSYNC;
-#define MAX_ARGS 30; /* should support at least 8-way mirrors */
+#define MAX_ARGS 30 /* should support at least 8-way mirrors */
/* FIXME Remove unnecessary limit. It tells you how many devices there are - use it! */
char *args[MAX_ARGS];
@@ -122,7 +133,6 @@
static int _remove_failed_devices(const char *device)
{
int r;
- void *handle;
#define CMD_SIZE 256 /* FIXME Use system restriction */
char cmd_str[CMD_SIZE];
char *vg = NULL, *lv = NULL, *layer = NULL;
@@ -144,10 +154,7 @@
return -ENAMETOOLONG; /* FIXME Replace with generic error return - reason for failure has already got logged */
}
- lvm2_log_fn(_temporary_log_fn);
- handle = lvm2_init();
- lvm2_log_level(handle, 1);
- r = lvm2_run(handle, cmd_str);
+ r = lvm2_run(_lvm_handle, cmd_str);
dm_pool_empty(_mem_pool); /* FIXME: not safe with multiple threads */
return (r == 1) ? 0 : -1;
@@ -161,9 +168,9 @@
char *target_type = NULL;
char *params;
- if (pthread_mutex_trylock(&_lock)) {
+ if (pthread_mutex_trylock(&_event_mutex)) {
syslog(LOG_NOTICE, "Another thread is handling an event. Waiting...");
- pthread_mutex_lock(&_lock);
+ pthread_mutex_lock(&_event_mutex);
}
/* FIXME Move inside libdevmapper */
if (!(dmt = dm_task_create(DM_DEVICE_STATUS))) {
@@ -185,9 +192,10 @@
next = dm_get_next_target(dmt, next, &start, &length,
&target_type, ¶ms);
- if (!target_type)
+ if (!target_type) {
syslog(LOG_INFO, "%s mapping lost.\n", device);
continue;
+ }
if (strcmp(target_type, "mirror")) {
syslog(LOG_INFO, "%s has unmirrored portion.\n", device);
@@ -225,11 +233,15 @@
fail:
if (dmt)
dm_task_destroy(dmt);
- pthread_mutex_unlock(&_lock);
+ pthread_mutex_unlock(&_event_mutex);
}
int register_device(const char *device)
{
+ int r = 0;
+
+ pthread_mutex_lock(&_register_mutex);
+
syslog(LOG_INFO, "Monitoring mirror device, %s for events\n", device);
/*
@@ -237,19 +249,42 @@
* than enough for what we need (device mapper name splitting)
*/
if (!_mem_pool && !(_mem_pool = dm_pool_create("mirror_dso", 1024)))
- return 0;
+ goto out;
+
+ if (!_lvm_handle) {
+ lvm2_log_fn(_temporary_log_fn);
+ if (!(_lvm_handle = lvm2_init())) {
+ dm_pool_destroy(_mem_pool);
+ _mem_pool = NULL;
+ goto out;
+ }
+ lvm2_log_level(_lvm_handle, LVM2_LOG_SUPPRESS);
+ /* FIXME Temporary: move to dmeventd core */
+ lvm2_run(_lvm_handle, "_memlock_inc");
+ }
_register_count++;
+ r = 1;
+
+out:
+ pthread_mutex_unlock(&_register_mutex);
- return 1;
+ return r;
}
int unregister_device(const char *device)
{
+ pthread_mutex_lock(&_register_mutex);
+
if (!--_register_count) {
dm_pool_destroy(_mem_pool);
_mem_pool = NULL;
+ lvm2_run(_lvm_handle, "_memlock_dec");
+ lvm2_exit(_lvm_handle);
+ _lvm_handle = NULL;
}
- return 1;
+ pthread_mutex_unlock(&_register_mutex);
+
+ return 1;
}
--- LVM2/tools/lvmcmdlib.c 2006/08/22 15:56:06 1.2
+++ LVM2/tools/lvmcmdlib.c 2007/01/08 14:24:20 1.3
@@ -77,7 +77,13 @@
goto out;
}
- ret = lvm_run_command(cmd, argc, argv);
+ /* FIXME Temporary - move to libdevmapper */
+ if (!strcmp(cmdline, "_memlock_inc"))
+ memlock_inc();
+ if (!strcmp(cmdline, "_memlock_dec"))
+ memlock_dec();
+ else
+ ret = lvm_run_command(cmd, argc, argv);
out:
dm_free(cmdcopy);
^ permalink raw reply [flat|nested] 6+ messages in thread
* LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr ...
@ 2006-08-21 12:04 agk
0 siblings, 0 replies; 6+ messages in thread
From: agk @ 2006-08-21 12:04 UTC (permalink / raw)
To: lvm2-cvs
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: agk@sourceware.org 2006-08-21 12:04:55
Modified files:
. : WHATS_NEW
dmeventd/mirror: dmeventd_mirror.c
lib/activate : dev_manager.c
lib/filters : filter-sysfs.c
lib/misc : lvm-string.c lvm-string.h
man : Makefile.in
Log message:
Add dm_split_words() and dm_split_lvm_name() to libdevmapper.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.428&r2=1.429
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/dmeventd/mirror/dmeventd_mirror.c.diff?cvsroot=lvm2&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.113&r2=1.114
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter-sysfs.c.diff?cvsroot=lvm2&r1=1.11&r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/misc/lvm-string.c.diff?cvsroot=lvm2&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/misc/lvm-string.h.diff?cvsroot=lvm2&r1=1.11&r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/Makefile.in.diff?cvsroot=lvm2&r1=1.16&r2=1.17
--- LVM2/WHATS_NEW 2006/08/18 21:49:19 1.428
+++ LVM2/WHATS_NEW 2006/08/21 12:04:54 1.429
@@ -1,5 +1,6 @@
Version 2.02.10 -
==================================
+ Move split_words() and split_dm_name() into libdevmapper.
Add lvconvert man page.
Add mirror options to man pages.
Prevent mirror renames.
--- LVM2/dmeventd/mirror/dmeventd_mirror.c 2006/07/04 18:57:27 1.7
+++ LVM2/dmeventd/mirror/dmeventd_mirror.c 2006/08/21 12:04:54 1.8
@@ -48,7 +48,7 @@
char *p;
int log_argc, num_devs, num_failures=0;
- if (max_args <= split_words(params, max_args, args)) {
+ if (max_args <= dm_split_words(params, max_args, 0, args)) {
syslog(LOG_ERR, "Unable to split mirror parameters: Arg list too long");
return -E2BIG;
}
@@ -121,7 +121,7 @@
if (strlen(device) > 200)
return -ENAMETOOLONG;
- if (!split_dm_name(mem_pool, device, &vg, &lv, &layer)) {
+ if (!dm_split_lvm_name(mem_pool, device, &vg, &lv, &layer)) {
syslog(LOG_ERR, "Unable to determine VG name from %s",
device);
return -ENOMEM;
--- LVM2/lib/activate/dev_manager.c 2006/08/08 21:20:00 1.113
+++ LVM2/lib/activate/dev_manager.c 2006/08/21 12:04:55 1.114
@@ -912,7 +912,7 @@
name = dm_tree_node_get_name(child);
if (name && lvlayer->old_name && *lvlayer->old_name && strcmp(name, lvlayer->old_name)) {
- if (!split_dm_name(dm->mem, lvlayer->old_name, &vgname, &lvname, &layer)) {
+ if (!dm_split_lvm_name(dm->mem, lvlayer->old_name, &vgname, &lvname, &layer)) {
log_error("_create_lv_symlinks: Couldn't split up old device name %s", lvlayer->old_name);
return 0;
}
@@ -938,7 +938,7 @@
if (!(uuid = dm_tree_node_get_uuid(child)))
continue;
- if (!split_dm_name(dm->mem, name, &vgname, &lvname, &layer)) {
+ if (!dm_split_lvm_name(dm->mem, name, &vgname, &lvname, &layer)) {
log_error("_clean_tree: Couldn't split up device name %s.", name);
return 0;
}
--- LVM2/lib/filters/filter-sysfs.c 2006/04/19 15:33:06 1.11
+++ LVM2/lib/filters/filter-sysfs.c 2006/08/21 12:04:55 1.12
@@ -44,7 +44,7 @@
}
while (fgets(buffer, sizeof(buffer), fp)) {
- if (split_words(buffer, 4, split) == 4 &&
+ if (dm_split_words(buffer, 4, 0, split) == 4 &&
!strcmp(split[2], "sysfs")) {
if (lvm_snprintf(path, len, "%s/%s", split[1],
"block") >= 0) {
--- LVM2/lib/misc/lvm-string.c 2006/04/28 17:01:07 1.10
+++ LVM2/lib/misc/lvm-string.c 2006/08/21 12:04:55 1.11
@@ -17,8 +17,6 @@
#include "lvm-types.h"
#include "lvm-string.h"
-#include <ctype.h>
-
/*
* On error, up to glibc 2.0.6, snprintf returned -1 if buffer was too small;
* From glibc 2.1 it returns number of chars (excl. trailing null) that would
@@ -59,47 +57,6 @@
}
/*
- * consume characters while they match the predicate function.
- */
-static char *_consume(char *buffer, int (*fn) (int))
-{
- while (*buffer && fn(*buffer))
- buffer++;
-
- return buffer;
-}
-
-static int _isword(int c)
-{
- return !isspace(c);
-}
-
-/*
- * Split buffer into NULL-separated words in argv.
- * Returns number of words.
- */
-int split_words(char *buffer, unsigned max, char **argv)
-{
- unsigned arg;
-
- for (arg = 0; arg < max; arg++) {
- buffer = _consume(buffer, isspace);
- if (!*buffer)
- break;
-
- argv[arg] = buffer;
- buffer = _consume(buffer, _isword);
-
- if (*buffer) {
- *buffer = '\0';
- buffer++;
- }
- }
-
- return arg;
-}
-
-/*
* Device layer names are all of the form <vg>-<lv>-<layer>, any
* other hyphens that appear in these names are quoted with yet
* another hyphen. The top layer of any device has no layer
@@ -169,47 +126,6 @@
return r;
}
-/*
- * Remove hyphen quoting from a component of a name.
- * NULL-terminates the component and returns start of next component.
- */
-static char *_unquote(char *component)
-{
- char *c = component;
- char *o = c;
- char *r;
-
- while (*c) {
- if (*(c + 1)) {
- if (*c == '-') {
- if (*(c + 1) == '-')
- c++;
- else
- break;
- }
- }
- *o = *c;
- o++;
- c++;
- }
-
- r = (*c) ? c + 1 : c;
- *o = '\0';
-
- return r;
-}
-
-int split_dm_name(struct dm_pool *mem, const char *dmname,
- char **vgname, char **lvname, char **layer)
-{
- if (!(*vgname = dm_pool_strdup(mem, dmname)))
- return 0;
-
- _unquote(*layer = _unquote(*lvname = _unquote(*vgname)));
-
- return 1;
-}
-
int validate_name(const char *n)
{
register char c;
--- LVM2/lib/misc/lvm-string.h 2006/04/19 15:33:06 1.11
+++ LVM2/lib/misc/lvm-string.h 2006/08/21 12:04:55 1.12
@@ -34,14 +34,9 @@
int emit_to_buffer(char **buffer, size_t *size, const char *fmt, ...);
-int split_words(char *buffer, unsigned max, char **argv);
-
char *build_dm_name(struct dm_pool *mem, const char *vg,
const char *lv, const char *layer);
-int split_dm_name(struct dm_pool *mem, const char *dmname,
- char **vgname, char **lvname, char **layer);
-
int validate_name(const char *n);
#endif
--- LVM2/man/Makefile.in 2006/08/18 21:49:19 1.16
+++ LVM2/man/Makefile.in 2006/08/21 12:04:55 1.17
@@ -17,7 +17,7 @@
VPATH = @srcdir@
MAN5=lvm.conf.5
-MAN8=lvchange.8 lvconvert.8 lvcreate.8 lvdisplay.8 lvextend.8 lvm.8
+MAN8=lvchange.8 lvconvert.8 lvcreate.8 lvdisplay.8 lvextend.8 lvm.8 \
lvmchange.8 \
lvmdiskscan.8 lvreduce.8 lvremove.8 lvrename.8 lvresize.8 lvs.8 \
lvscan.8 pvchange.8 pvcreate.8 pvdisplay.8 pvmove.8 pvremove.8 \
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-01-31 12:19 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-11 19:45 LVM2 ./WHATS_NEW dmeventd/mirror/dmeventd_mirr agk
2006-08-21 12:04 agk
2007-01-08 14:24 agk
2007-01-11 22:24 agk
2007-01-15 18:22 agk
2008-01-31 12:19 agk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).