[lvm-devel] [PATCH 21/21] Update lvm_vg_get_attr_list() to use attributes obtained during vg_open().

Dave Wysochanski dwysocha at redhat.com
Mon Feb 9 04:22:09 UTC 2009


The original lvm_vg_get_attr_list() code used rh->mem, then called
dm_report_free(rh) which released the memory for the attributes.
This patch relies on the change to vg_open(), which reads all vg
attributes and stores them on a list inside struct volume_group.
The list remains valid and the report handle open until vg_close
is called.

TODO: Fix lvm_vg_get_attr_value() to use attribute values obtained
during vg_open.  Probably need to define an lvm_attribute structure.

Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
---
 lib/lvm2.h          |    2 +-
 lib/report/report.c |   27 +++++----------------------
 2 files changed, 6 insertions(+), 23 deletions(-)

diff --git a/lib/lvm2.h b/lib/lvm2.h
index cc57574..353f5fa 100644
--- a/lib/lvm2.h
+++ b/lib/lvm2.h
@@ -80,7 +80,7 @@ const char *lvm_vg_name(const vg_t *vg);
 const char *lvm_lv_name(const lv_t *lv);
 const char *lvm_vg_uuid(vg_t *vg);
 
-int lvm_vg_get_attr_list(vg_t *vg, struct dm_list *list);
+struct dm_list * lvm_vg_get_attr_list(vg_t *vg);
 int lvm_vg_get_attr_value(vg_t *vg, const char *attr_name,
 			  struct dm_report_field_value_type *value);
 
diff --git a/lib/report/report.c b/lib/report/report.c
index 1d219bf..556dca1 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1193,29 +1193,9 @@ int report_object(void *handle, struct volume_group *vg,
 /*
  * Get a list of attributes for a vg
  */
-int lvm_vg_get_attr_list(vg_t *vg, struct dm_list *list)
+struct dm_list *lvm_vg_get_attr_list(vg_t *vg)
 {
-	void *rh;
-	report_type_t report_type = VGS;
-
-	dm_list_init(list);
-
-	/*
-	 * Create a report so we can return the headings.
-	 */
-	if (!(rh = report_init(vg->cmd, "all", "", &report_type,
-			       " ", 1, 1, 1, 0, 0, 0))) {
-		stack;
-		return 0;
-	}
-
-	if (!dm_report_get_field_ids(rh, report_type, list)) {
-		dm_report_free(rh);
-		return 0;
-	}
-
-	dm_report_free(rh);
-	return 1;
+	return &vg->attrs;
 }
 
 /*
@@ -1224,6 +1204,9 @@ int lvm_vg_get_attr_list(vg_t *vg, struct dm_list *list)
 int lvm_vg_get_attr_value(vg_t *vg, const char *attr_name,
 			  struct dm_report_field_value_type *value)
 {
+	/*
+	 * FIXME: this should be returning values filled in during vg_open
+	 */
 	void *rh;
 	report_type_t report_type = VGS;
 
-- 
1.6.0.5




More information about the lvm-devel mailing list