summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2011-12-22 15:55:21 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2011-12-22 15:55:21 +0000
commit8527b9273869c08e631f82164f7ac28fc5b67b7a (patch)
treefff7d3e23974f28b15a1865b8e8fb74eaac38397
parent59e1bb62de24a91cb81676a345165cc46a86e6bb (diff)
downloadlvm2-8527b9273869c08e631f82164f7ac28fc5b67b7a.tar.gz
lvm2-8527b9273869c08e631f82164f7ac28fc5b67b7a.tar.xz
lvm2-8527b9273869c08e631f82164f7ac28fc5b67b7a.zip
Add helper function dmeventd_lvm2_command().
Since this code is in all plugins - create a common helper function.
-rw-r--r--WHATS_NEW1
-rw-r--r--daemons/dmeventd/plugins/lvm2/.exported_symbols1
-rw-r--r--daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c23
-rw-r--r--daemons/dmeventd/plugins/lvm2/dmeventd_lvm.h3
4 files changed, 28 insertions, 0 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 65010d07..39bc8756 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.89 -
==================================
+ Add helper dmeventd_lvm2_command() into libdevmapper-event-lvm2 library.
Updated documentation for dmeventd.
Drop extra stat call before opening device.
Reduce number of lstat calls when selecting device alias.
diff --git a/daemons/dmeventd/plugins/lvm2/.exported_symbols b/daemons/dmeventd/plugins/lvm2/.exported_symbols
index ebe3d057..646e4cf3 100644
--- a/daemons/dmeventd/plugins/lvm2/.exported_symbols
+++ b/daemons/dmeventd/plugins/lvm2/.exported_symbols
@@ -4,3 +4,4 @@ dmeventd_lvm2_lock
dmeventd_lvm2_unlock
dmeventd_lvm2_pool
dmeventd_lvm2_run
+dmeventd_lvm2_command
diff --git a/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c b/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c
index 789c68a3..32a387ff 100644
--- a/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c
+++ b/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.c
@@ -151,3 +151,26 @@ int dmeventd_lvm2_run(const char *cmdline)
return lvm2_run(_lvm_handle, cmdline);
}
+int dmeventd_lvm2_command(struct dm_pool *mem, char *buffer, size_t size,
+ const char *cmd, const char *device)
+{
+ char *vg = NULL, *lv = NULL, *layer;
+ int r;
+
+ if (!dm_split_lvm_name(mem, device, &vg, &lv, &layer)) {
+ syslog(LOG_ERR, "Unable to determine VG name from %s.\n",
+ device);
+ return 0;
+ }
+
+ r = dm_snprintf(buffer, size, "%s %s/%s", cmd, vg, lv);
+
+ dm_pool_free(mem, vg);
+
+ if (r < 0) {
+ syslog(LOG_ERR, "Unable to form LVM command. (too long).\n");
+ return 0;
+ }
+
+ return 1;
+}
diff --git a/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.h b/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.h
index 8efcb9b6..1960c719 100644
--- a/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.h
+++ b/daemons/dmeventd/plugins/lvm2/dmeventd_lvm.h
@@ -36,4 +36,7 @@ void dmeventd_lvm2_unlock(void);
struct dm_pool *dmeventd_lvm2_pool(void);
+int dmeventd_lvm2_command(struct dm_pool *mem, char *buffer, size_t size,
+ const char *cmd, const char *device);
+
#endif /* _DMEVENTD_LVMWRAP_H */