]> sourceware.org Git - lvm2.git/commitdiff
Change import_vg_from_buffer to use config_tree
authorZdenek Kabelac <zkabelac@redhat.com>
Mon, 10 Jan 2011 13:13:42 +0000 (13:13 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 10 Jan 2011 13:13:42 +0000 (13:13 +0000)
Change function import_vg_from_buffer() to import_vg_from_config_tree().
Instead of creating config tree inside the function allow config tree to
be passed as parameter - usable later for caching.

WHATS_NEW
lib/cache/lvmcache.c
lib/cache/lvmcache.h
lib/format_text/import.c
lib/metadata/metadata.h

index f3c357dd3abb84c2909b26af48cb65cdc3256415..2672e039f0666efc9c84ee11da7c6596c2aa182a 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.80 - 
 ====================================
+  Pass config_tree to renamed function import_vg_from_config_tree().
   Detect NULL handle in get_property().
   Fix superfluous /usr in ocf_scriptdir instalation path.
   Add --with-ocfdir configurable option.
index d545563100a4a6a95e3fb0dbcbe23b877fc8792c..ebd6d44444907fab59477044ad1aeab9cb4e8374 100644 (file)
@@ -26,6 +26,7 @@
 #include "format-text.h"
 #include "format_pool.h"
 #include "format1.h"
+#include "config.h"
 
 static struct dm_hash_table *_pvid_hash = NULL;
 static struct dm_hash_table *_vgid_hash = NULL;
@@ -650,12 +651,20 @@ struct volume_group *lvmcache_get_vg(const char *vgid, unsigned precommitted)
                                                      vgid, NULL)))
                return_NULL;
 
-       if (!(vg = import_vg_from_buffer(vginfo->vgmetadata, fid))) {
+       if (!(vginfo->cft =
+             create_config_tree_from_string(fid->fmt->cmd,
+                                            vginfo->vgmetadata))) {
                _free_cached_vgmetadata(vginfo);
-               free_vg(vg);
                return_NULL;
        }
 
+       if (!(vg = import_vg_from_config_tree(vginfo->cft, fid))) {
+               _free_cached_vgmetadata(vginfo);
+               destroy_config_tree(vginfo->cft);
+               return_NULL;
+       }
+       destroy_config_tree(vginfo->cft);
+
        log_debug("Using cached %smetadata for VG %s.",
                  vginfo->precommitted ? "pre-committed" : "", vginfo->vgname);
 
index 06838dc8055061032940750a9d74e5bbeedf2237..8c07a26f49d50de92591260d7a7b4e430e4cd816 100644 (file)
@@ -33,6 +33,7 @@
 struct cmd_context;
 struct format_type;
 struct volume_group;
+struct config_tree;
 
 /* One per VG */
 struct lvmcache_vginfo {
@@ -46,6 +47,7 @@ struct lvmcache_vginfo {
        struct lvmcache_vginfo *next; /* Another VG with same name? */
        char *creation_host;
        char *vgmetadata;       /* Copy of VG metadata as format_text string */
+       struct config_tree *cft; /* Config tree created from vgmetadata */
        unsigned precommitted;  /* Is vgmetadata live or precommitted? */
 };
 
index 60f465fc8dd54b2bc0dfae8e5f3762678dc21805..aa8c80744cd476ff81f06879e4a7f6f0a764fb39 100644 (file)
@@ -131,18 +131,14 @@ struct volume_group *text_vg_import_file(struct format_instance *fid,
                                 when, desc);
 }
 
-struct volume_group *import_vg_from_buffer(const char *buf,
-                                           struct format_instance *fid)
+struct volume_group *import_vg_from_config_tree(const struct config_tree *cft,
+                                               struct format_instance *fid)
 {
        struct volume_group *vg = NULL;
-       struct config_tree *cft;
        struct text_vg_version_ops **vsn;
 
        _init_text_import();
 
-       if (!(cft = create_config_tree_from_string(fid->fmt->cmd, buf)))
-               return_NULL;
-
        for (vsn = &_text_vsn_list[0]; *vsn; vsn++) {
                if (!(*vsn)->check_version(cft))
                        continue;
@@ -155,6 +151,5 @@ struct volume_group *import_vg_from_buffer(const char *buf,
                break;
        }
 
-       destroy_config_tree(cft);
        return vg;
 }
index 08bff4a7e6d69f79e3fa54f96b5917b064853e97..c0f9148e9f8f0797a027ee6869343aaebcbc1c37 100644 (file)
 //#define FMT_RESIZE_PV                0x00000080U     /* Supports pvresize? */
 //#define FMT_UNLIMITED_STRIPESIZE 0x00000100U /* Unlimited stripe size? */
 
+struct config_tree;
 struct metadata_area;
 
 /* Per-format per-metadata area operations */
@@ -388,6 +389,8 @@ void lv_calculate_readahead(const struct logical_volume *lv, uint32_t *read_ahea
 int export_vg_to_buffer(struct volume_group *vg, char **buf);
 struct volume_group *import_vg_from_buffer(const char *buf,
                                           struct format_instance *fid);
+struct volume_group *import_vg_from_config_tree(const struct config_tree *cft,
+                                               struct format_instance *fid);
 
 /*
  * Mirroring functions
This page took 0.052562 seconds and 5 git commands to generate.