[lvm-devel] [PATCH 6/9] Udev integration: add lvmsplit command for dmsetup

Peter Rajnoha prajnoha at redhat.com
Mon May 25 12:19:15 UTC 2009


Adds lvmsplit command for dmsetup that can split-up given DM name into
its VG/LV/LAYER constituents. No change in here, too...

Peter


diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index 8db38b0..f9551d9 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -746,6 +746,24 @@ static int _udevnotify(int argc, char **argv, void *data __attribute((unused)))
 	return dm_udev_notif_sem_dec(cookie);
 }
 
+static int _lvmsplit(int argc, char **argv, void *data __attribute((unused)))
+{
+	int r = 1;
+
+	struct dmsetup_report_obj obj;
+
+	obj.task = NULL;
+	obj.info = NULL;
+	obj.deps_task = NULL;
+	obj.tree_node = NULL;
+	obj.split_name = _get_split_name("LVM-", argv[1]);
+
+	r = dm_report_object(_report, &obj);
+	_destroy_split_name(obj.split_name);
+
+	return r;
+}
+
 static int _version(int argc __attribute((unused)), char **argv __attribute((unused)), void *data __attribute((unused)))
 {
 	char version[80];
@@ -2146,6 +2164,7 @@ FIELD_O(NAME, dm_split_name, STR, "LVLayer", lv_layer, 7, dm_lv_layer_name, "lv_
 #undef FIELD_F
 
 static const char *default_report_options = "name,major,minor,attr,open,segments,events,uuid";
+static const char *lvmsplit_report_options = "vg_name,lv_name,lv_layer";
 
 static int _report_init(struct command *c)
 {
@@ -2158,6 +2177,9 @@ static int _report_init(struct command *c)
 	size_t len = 0;
 	int r = 0;
 
+	if (!strcmp(c->name, "lvmsplit"))
+		options = (char *) lvmsplit_report_options;
+
 	/* emulate old dmsetup behaviour */
 	if (_switches[NOHEADINGS_ARG]) {
 		separator = ":";
@@ -2295,6 +2317,7 @@ static struct command _commands[] = {
 	{"wait", "<device> [<event_nr>]", 0, 2, _wait},
 	{"mknodes", "[<device>]", 0, 1, _mknodes},
 	{"udevnotify", "<cookie>", 1, 1, _udevnotify},
+	{"lvmsplit", "<dev_name>", 1, 1, _lvmsplit},
 	{"targets", "", 0, 0, _targets},
 	{"version", "", 0, 0, _version},
 	{"setgeometry", "<device> <cyl> <head> <sect> <start>", 5, 5, _setgeometry},
@@ -2918,6 +2941,9 @@ int main(int argc, char **argv)
 		goto out;
 	}
 
+	if (!_switches[COLS_ARG] && !strcmp(c->name, "lvmsplit"))
+		_switches[COLS_ARG]++;
+
 	if (_switches[COLS_ARG] && !_report_init(c))
 		goto out;
 




More information about the lvm-devel mailing list