[lvm-devel] master - Remove independent metadata areas

David Teigland teigland at sourceware.org
Wed Jun 13 19:33:16 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=17f5572bc972c932bcf62fc2bff3029268ae0109
Commit:        17f5572bc972c932bcf62fc2bff3029268ae0109
Parent:        9df6f601e019d0e5b052d9e6aa0bd9dc732e411d
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Wed Jun 13 12:25:19 2018 -0500
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Wed Jun 13 12:25:19 2018 -0500

Remove independent metadata areas

in which metadata is stored in files on the local fs
instead of on PVs.
---
 lib/cache/lvmcache.c          |   36 -----
 lib/commands/toolcontext.c    |    3 -
 lib/commands/toolcontext.h    |    1 -
 lib/config/config_settings.h  |   15 +--
 lib/format_text/format-text.c |  340 +----------------------------------------
 lib/format_text/layout.h      |    2 -
 lib/metadata/metadata.c       |   12 --
 7 files changed, 2 insertions(+), 407 deletions(-)

diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index 8db964c..c7e3903 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -60,7 +60,6 @@ struct lvmcache_vginfo {
 	uint32_t mda_checksum;
 	size_t mda_size;
 	int seqno;
-	int independent_metadata_location; /* metadata read from independent areas */
 	int scan_summary_mismatch; /* vgsummary from devs had mismatching seqno or checksum */
 };
 
@@ -794,16 +793,6 @@ next:
  * VG metadata to figure out that a dev with no metadata belongs
  * to a particular VG, so a device with no mdas will not be linked
  * to that VG after a scan.
- *
- * (In the special case where VG metadata is stored in files on the
- * file system (configured in lvm.conf), the
- * vginfo->independent_metadata_location flag is set during label scan.
- * When we get here to rescan, we are revalidating the device to VG
- * mapping from label scan by repeating the label scan on a subset of
- * devices.  If we see independent_metadata_location is set from the
- * initial label scan, we know that there is nothing to do because
- * there is no device to VG mapping to revalidate, since the VG metadata
- * comes directly from files.)
  */
 
 int lvmcache_label_rescan_vg(struct cmd_context *cmd, const char *vgname, const char *vgid)
@@ -821,16 +810,6 @@ int lvmcache_label_rescan_vg(struct cmd_context *cmd, const char *vgname, const
 	if (!(vginfo = lvmcache_vginfo_from_vgname(vgname, vgid)))
 		return_0;
 
-	/*
-	 * When the VG metadata is from an independent location,
-	 * then rescanning the devices in the VG won't find the
-	 * metadata, and will destroy the vginfo/info associations
-	 * that were created during label scan when the
-	 * independent locations were read.
-	 */
-	if (vginfo->independent_metadata_location)
-		return 1;
-
 	dm_list_iterate_items(info, &vginfo->infos) {
 		if (!(devl = malloc(sizeof(*devl)))) {
 			log_error("device_list element allocation failed");
@@ -897,7 +876,6 @@ int lvmcache_label_scan(struct cmd_context *cmd)
 	struct lvmcache_info *info;
 	struct lvmcache_vginfo *vginfo;
 	struct device_list *devl;
-	struct format_type *fmt;
 	int vginfo_count = 0;
 
 	int r = 0;
@@ -998,12 +976,6 @@ int lvmcache_label_scan(struct cmd_context *cmd)
 		}
 	}
 
-	/* Perform any format-specific scanning e.g. text files */
-	if (cmd->independent_metadata_areas)
-		dm_list_iterate_items(fmt, &cmd->formats)
-			if (fmt->ops->scan && !fmt->ops->scan(fmt, NULL))
-				goto out;
-
 	r = 1;
 
       out:
@@ -2234,14 +2206,6 @@ int lvmcache_vgid_is_cached(const char *vgid) {
 	return 1;
 }
 
-void lvmcache_set_independent_location(const char *vgname)
-{
-	struct lvmcache_vginfo *vginfo;
-
-	if ((vginfo = lvmcache_vginfo_from_vgname(vgname, NULL)))
-		vginfo->independent_metadata_location = 1;
-}
-
 uint64_t lvmcache_smallest_mda_size(struct lvmcache_info *info)
 {
 	if (!info)
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index aca93f9..8c18fc6 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -1796,7 +1796,6 @@ struct cmd_context *create_toolcontext(unsigned is_clvmd,
 	cmd->threaded = threaded ? 1 : 0;
 	cmd->handles_missing_pvs = 0;
 	cmd->handles_unknown_segments = 0;
-	cmd->independent_metadata_areas = 0;
 	cmd->ignore_clustered_vgs = 0;
 	cmd->hosttags = 0;
 	dm_list_init(&cmd->arg_value_groups);
@@ -1968,8 +1967,6 @@ static void _destroy_formats(struct cmd_context *cmd, struct dm_list *formats)
 		dm_list_del(&fmt->list);
 		fmt->ops->destroy(fmt);
 	}
-
-	cmd->independent_metadata_areas = 0;
 }
 
 static void _destroy_segtypes(struct dm_list *segtypes)
diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
index fee35d4..18e1b7d 100644
--- a/lib/commands/toolcontext.h
+++ b/lib/commands/toolcontext.h
@@ -146,7 +146,6 @@ struct cmd_context {
 	unsigned metadata_read_only:1;
 	unsigned ignore_clustered_vgs:1;
 	unsigned threaded:1;			/* set if running within a thread e.g. clvmd */
-	unsigned independent_metadata_areas:1;	/* active formats have MDAs outside PVs */
 	unsigned unknown_system_id:1;
 	unsigned include_historical_lvs:1;	/* also process/report/display historical LVs */
 	unsigned record_historical_lvs:1;	/* record historical LVs */
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
index 32a6476..8aa4879 100644
--- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h
@@ -1509,20 +1509,7 @@ cfg(metadata_pvmetadataignore_CFG, "pvmetadataignore", metadata_CFG_SECTION, CFG
 cfg(metadata_stripesize_CFG, "stripesize", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_COMMENTED, CFG_TYPE_INT, DEFAULT_STRIPESIZE, vsn(1, 0, 0), NULL, 0, NULL, NULL)
 
 cfg_array(metadata_dirs_CFG, "dirs", metadata_CFG_SECTION, CFG_ADVANCED | CFG_DEFAULT_UNDEFINED, CFG_TYPE_STRING, NULL, vsn(1, 0, 0), NULL, 0, NULL,
-	"Directories holding live copies of text format metadata.\n"
-	"These directories must not be on logical volumes!\n"
-	"It's possible to use LVM with a couple of directories here,\n"
-	"preferably on different (non-LV) filesystems, and with no other\n"
-	"on-disk metadata (pvmetadatacopies = 0). Or this can be in addition\n"
-	"to on-disk metadata areas. The feature was originally added to\n"
-	"simplify testing and is not supported under low memory situations -\n"
-	"the machine could lock up. Never edit any files in these directories\n"
-	"by hand unless you are absolutely sure you know what you are doing!\n"
-	"Use the supplied toolset to make changes (e.g. vgcfgrestore).\n"
-	"#\n"
-	"Example\n"
-	"dirs = [ \"/etc/lvm/metadata\", \"/mnt/disk2/lvm/metadata2\" ]\n"
-	"#\n")
+	  "This setting is no longer used.\n")
 
 cfg_section(metadata_disk_areas_CFG_SUBSECTION, "disk_areas", metadata_CFG_SECTION, CFG_UNSUPPORTED | CFG_DEFAULT_COMMENTED, vsn(1, 0, 0), 0, NULL, NULL)
 cfg_section(disk_area_CFG_SUBSECTION, "disk_area", metadata_disk_areas_CFG_SUBSECTION, CFG_NAME_VARIABLE | CFG_UNSUPPORTED | CFG_DEFAULT_COMMENTED, vsn(1, 0, 0), 0, NULL, NULL)
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
index 907944a..a1fce86 100644
--- a/lib/format_text/format-text.c
+++ b/lib/format_text/format-text.c
@@ -45,16 +45,6 @@ struct text_fid_context {
 	uint32_t raw_metadata_buf_size;
 };
 
-struct dir_list {
-	struct dm_list list;
-	char dir[0];
-};
-
-struct raw_list {
-	struct dm_list list;
-	struct device_area dev_area;
-};
-
 int rlocn_is_ignored(const struct raw_locn *rlocn)
 {
 	return (rlocn->flags & RAW_LOCN_IGNORED ? 1 : 0);
@@ -505,22 +495,6 @@ static uint64_t _next_rlocn_offset(struct raw_locn *rlocn, struct mda_header *md
 	return new_start_offset;
 }
 
-static int _raw_holds_vgname(struct format_instance *fid,
-			     struct device_area *dev_area, const char *vgname)
-{
-	int r = 0;
-	int noprecommit = 0;
-	struct mda_header *mdah;
-
-	if (!(mdah = raw_read_mda_header(fid->fmt, dev_area, 0)))
-		return_0;
-
-	if (_read_metadata_location_vg(dev_area, mdah, 0, vgname, &noprecommit))
-		r = 1;
-
-	return r;
-}
-
 static struct volume_group *_vg_read_raw_area(struct format_instance *fid,
 					      const char *vgname,
 					      struct device_area *area,
@@ -1118,75 +1092,6 @@ static int _vg_remove_file(struct format_instance *fid __attribute__((unused)),
 	return 1;
 }
 
-static int _scan_file(const struct format_type *fmt, const char *vgname)
-{
-	struct dirent *dirent;
-	struct dir_list *dl;
-	struct dm_list *dir_list;
-	char *tmp;
-	DIR *d;
-	struct volume_group *vg;
-	struct format_instance *fid;
-	struct format_instance_ctx fic;
-	char path[PATH_MAX];
-	char *scanned_vgname;
-
-	dir_list = &((struct mda_lists *) fmt->private)->dirs;
-
-	if (!dm_list_empty(dir_list))
-		log_debug_metadata("Scanning independent files for %s", vgname ? vgname : "VGs");
-
-	dm_list_iterate_items(dl, dir_list) {
-		if (!(d = opendir(dl->dir))) {
-			log_sys_error("opendir", dl->dir);
-			continue;
-		}
-		while ((dirent = readdir(d)))
-			if (strcmp(dirent->d_name, ".") &&
-			    strcmp(dirent->d_name, "..") &&
-			    (!(tmp = strstr(dirent->d_name, ".tmp")) ||
-			     tmp != dirent->d_name + strlen(dirent->d_name)
-			     - 4)) {
-				scanned_vgname = dirent->d_name;
-
-				/* If vgname supplied, only scan that one VG */
-				if (vgname && strcmp(vgname, scanned_vgname))
-					continue;
-
-				if (dm_snprintf(path, PATH_MAX, "%s/%s",
-						 dl->dir, scanned_vgname) < 0) {
-					log_error("Name too long %s/%s",
-						  dl->dir, scanned_vgname);
-					break;
-				}
-
-				/* FIXME stat file to see if it's changed */
-				/* FIXME: Check this fid is OK! */
-				fic.type = FMT_INSTANCE_PRIVATE_MDAS;
-				fic.context.private = NULL;
-				if (!(fid = _text_create_text_instance(fmt, &fic))) {
-					stack;
-					break;
-				}
-
-				log_debug_metadata("Scanning independent file %s for VG %s", path, scanned_vgname);
-
-				if ((vg = _vg_read_file_name(fid, scanned_vgname,
-							     path))) {
-					/* FIXME Store creation host in vg */
-					lvmcache_update_vg(vg, 0);
-					lvmcache_set_independent_location(vg->name);
-					release_vg(vg);
-				}
-			}
-
-		if (closedir(d))
-			log_sys_error("closedir", dl->dir);
-	}
-
-	return 1;
-}
-
 int read_metadata_location_summary(const struct format_type *fmt,
 		    struct mda_header *mdah, int primary_mda, struct device_area *dev_area,
 		    struct lvmcache_vgsummary *vgsummary, uint64_t *mda_free_sectors)
@@ -1326,55 +1231,6 @@ int read_metadata_location_summary(const struct format_type *fmt,
 	return 1;
 }
 
-/* used for independent_metadata_areas */
-
-static int _scan_raw(const struct format_type *fmt, const char *vgname __attribute__((unused)))
-{
-	struct raw_list *rl;
-	struct dm_list *raw_list;
-	struct volume_group *vg;
-	struct format_instance fid;
-	struct lvmcache_vgsummary vgsummary = { 0 };
-	struct mda_header *mdah;
-
-	raw_list = &((struct mda_lists *) fmt->private)->raws;
-
-	if (!dm_list_empty(raw_list))
-		log_debug_metadata("Scanning independent raw locations for %s", vgname ? vgname : "VGs");
-
-	fid.fmt = fmt;
-	dm_list_init(&fid.metadata_areas_in_use);
-	dm_list_init(&fid.metadata_areas_ignored);
-
-	dm_list_iterate_items(rl, raw_list) {
-		log_debug_metadata("Scanning independent dev %s", dev_name(rl->dev_area.dev));
-
-		if (!(mdah = raw_read_mda_header(fmt, &rl->dev_area, 0))) {
-			stack;
-			continue;
-		}
-
-		if (read_metadata_location_summary(fmt, mdah, 0, &rl->dev_area, &vgsummary, NULL)) {
-			vg = _vg_read_raw_area(&fid, vgsummary.vgname, &rl->dev_area, NULL, NULL, 0, 0);
-			if (vg) {
-				lvmcache_update_vg(vg, 0);
-				lvmcache_set_independent_location(vg->name);
-			}
-		}
-	}
-
-	return 1;
-}
-
-/* used for independent_metadata_areas */
-
-static int _text_scan(const struct format_type *fmt, const char *vgname)
-{
-	_scan_file(fmt, vgname);
-	_scan_raw(fmt, vgname);
-	return 1;
-}
-
 struct _write_single_mda_baton {
 	const struct format_type *fmt;
 	struct physical_volume *pv;
@@ -1535,28 +1391,6 @@ static int _text_pv_needs_rewrite(const struct format_type *fmt, struct physical
 	return 1;
 }
 
-static int _add_raw(struct dm_list *raw_list, struct device_area *dev_area)
-{
-	struct raw_list *rl;
-
-	/* Already present? */
-	dm_list_iterate_items(rl, raw_list) {
-		/* FIXME Check size/overlap consistency too */
-		if (rl->dev_area.dev == dev_area->dev &&
-		    rl->dev_area.start == dev_area->start)
-			return 1;
-	}
-
-	if (!(rl = malloc(sizeof(struct raw_list)))) {
-		log_error("_add_raw allocation failed");
-		return 0;
-	}
-	memcpy(&rl->dev_area, dev_area, sizeof(*dev_area));
-	dm_list_add(raw_list, &rl->list);
-
-	return 1;
-}
-
 /*
  * Copy constructor for a metadata_locn.
  */
@@ -1709,36 +1543,13 @@ static void _text_destroy_instance(struct format_instance *fid)
 	}
 }
 
-static void _free_dirs(struct dm_list *dir_list)
-{
-	struct dm_list *dl, *tmp;
-
-	dm_list_iterate_safe(dl, tmp, dir_list) {
-		dm_list_del(dl);
-		free(dl);
-	}
-}
-
-static void _free_raws(struct dm_list *raw_list)
-{
-	struct dm_list *rl, *tmp;
-
-	dm_list_iterate_safe(rl, tmp, raw_list) {
-		dm_list_del(rl);
-		free(rl);
-	}
-}
-
 static void _text_destroy(struct format_type *fmt)
 {
 	if (fmt->orphan_vg)
 		free_orphan_vg(fmt->orphan_vg);
 
-	if (fmt->private) {
-		_free_dirs(&((struct mda_lists *) fmt->private)->dirs);
-		_free_raws(&((struct mda_lists *) fmt->private)->raws);
+	if (fmt->private)
 		free(fmt->private);
-	}
 
 	free(fmt);
 }
@@ -1963,15 +1774,9 @@ static void *_create_text_context(struct dm_pool *mem, struct text_context *tc)
 static int _create_vg_text_instance(struct format_instance *fid,
                                     const struct format_instance_ctx *fic)
 {
-	static char path[PATH_MAX];
 	uint32_t type = fic->type;
 	struct text_fid_context *fidtc;
 	struct metadata_area *mda;
-	struct mda_context *mdac;
-	struct dir_list *dl;
-	struct raw_list *rl;
-	struct dm_list *dir_list, *raw_list;
-	struct text_context tc;
 	struct lvmcache_vginfo *vginfo;
 	const char *vg_name, *vg_id;
 
@@ -2001,53 +1806,12 @@ static int _create_vg_text_instance(struct format_instance *fid,
 			return 0;
 		}
 
-		if (type & FMT_INSTANCE_AUX_MDAS) {
-			dir_list = &((struct mda_lists *) fid->fmt->private)->dirs;
-			dm_list_iterate_items(dl, dir_list) {
-				if (dm_snprintf(path, PATH_MAX, "%s/%s", dl->dir, vg_name) < 0) {
-					log_error("Name too long %s/%s", dl->dir, vg_name);
-					return 0;
-				}
-
-				if (!(mda = dm_pool_zalloc(fid->mem, sizeof(*mda))))
-					return_0;
-				mda->ops = &_metadata_text_file_ops;
-				tc.path_live = path;
-				tc.path_edit = tc.desc = NULL;
-				mda->metadata_locn = _create_text_context(fid->mem, &tc);
-				mda->status = 0;
-				fid_add_mda(fid, mda, NULL, 0, 0);
-			}
-
-			raw_list = &((struct mda_lists *) fid->fmt->private)->raws;
-			dm_list_iterate_items(rl, raw_list) {
-				/* FIXME Cache this; rescan below if some missing */
-				if (!_raw_holds_vgname(fid, &rl->dev_area, vg_name))
-					continue;
-
-				if (!(mda = dm_pool_zalloc(fid->mem, sizeof(*mda))))
-					return_0;
-
-				if (!(mdac = dm_pool_zalloc(fid->mem, sizeof(*mdac))))
-					return_0;
-				mda->metadata_locn = mdac;
-				/* FIXME Allow multiple dev_areas inside area */
-				memcpy(&mdac->area, &rl->dev_area, sizeof(mdac->area));
-				mda->ops = &_metadata_text_raw_ops;
-				mda->status = 0;
-				/* FIXME MISTAKE? mda->metadata_locn = context; */
-				fid_add_mda(fid, mda, NULL, 0, 0);
-			}
-		}
-
 		if (type & FMT_INSTANCE_MDAS) {
 			if (!(vginfo = lvmcache_vginfo_from_vgname(vg_name, vg_id)))
 				goto_out;
 			if (!lvmcache_fid_add_mdas_vg(vginfo, fid))
 				goto_out;
 		}
-
-		/* FIXME If PV list or raw metadata area count are not as expected rescan */
 	}
 
 out:
@@ -2440,7 +2204,6 @@ static struct format_instance *_text_create_text_instance(const struct format_ty
 }
 
 static struct format_handler _text_handler = {
-	.scan = _text_scan,
 	.pv_initialise = _text_pv_initialise,
 	.pv_setup = _text_pv_setup,
 	.pv_add_metadata_area = _text_pv_add_metadata_area,
@@ -2455,84 +2218,11 @@ static struct format_handler _text_handler = {
 	.destroy = _text_destroy
 };
 
-static int _add_dir(const char *dir, struct dm_list *dir_list)
-{
-	struct dir_list *dl;
-
-	if (dm_create_dir(dir)) {
-		if (!(dl = malloc(sizeof(struct dm_list) + strlen(dir) + 1))) {
-			log_error("_add_dir allocation failed");
-			return 0;
-		}
-		log_very_verbose("Adding text format metadata dir: %s", dir);
-		strcpy(dl->dir, dir);
-		dm_list_add(dir_list, &dl->list);
-		return 1;
-	}
-
-	return 0;
-}
-
-static int _get_config_disk_area(struct cmd_context *cmd,
-				 const struct dm_config_node *cn, struct dm_list *raw_list)
-{
-	struct device_area dev_area;
-	const char *id_str;
-	struct id id;
-
-	if (!(cn = cn->child)) {
-		log_error("Empty metadata disk_area section of config file");
-		return 0;
-	}
-
-	if (!dm_config_get_uint64(cn, "start_sector", &dev_area.start)) {
-		log_error("Missing start_sector in metadata disk_area section "
-			  "of config file");
-		return 0;
-	}
-	dev_area.start <<= SECTOR_SHIFT;
-
-	if (!dm_config_get_uint64(cn, "size", &dev_area.size)) {
-		log_error("Missing size in metadata disk_area section "
-			  "of config file");
-		return 0;
-	}
-	dev_area.size <<= SECTOR_SHIFT;
-
-	if (!dm_config_get_str(cn, "id", &id_str)) {
-		log_error("Missing uuid in metadata disk_area section "
-			  "of config file");
-		return 0;
-	}
-
-	if (!id_read_format(&id, id_str)) {
-		log_error("Invalid uuid in metadata disk_area section "
-			  "of config file: %s", id_str);
-		return 0;
-	}
-
-	if (!(dev_area.dev = lvmcache_device_from_pvid(cmd, &id, NULL))) {
-		char buffer[64] __attribute__((aligned(8)));
-
-		if (!id_write_format(&id, buffer, sizeof(buffer)))
-			log_error("Couldn't find device.");
-		else
-			log_error("Couldn't find device with uuid '%s'.",
-				  buffer);
-
-		return 0;
-	}
-
-	return _add_raw(raw_list, &dev_area);
-}
-
 struct format_type *create_text_format(struct cmd_context *cmd)
 {
 	struct format_instance_ctx fic;
 	struct format_instance *fid;
 	struct format_type *fmt;
-	const struct dm_config_node *cn;
-	const struct dm_config_value *cv;
 	struct mda_lists *mda_lists;
 
 	if (!(fmt = malloc(sizeof(*fmt)))) {
@@ -2556,8 +2246,6 @@ struct format_type *create_text_format(struct cmd_context *cmd)
 		return NULL;
 	}
 
-	dm_list_init(&mda_lists->dirs);
-	dm_list_init(&mda_lists->raws);
 	mda_lists->file_ops = &_metadata_text_file_ops;
 	mda_lists->raw_ops = &_metadata_text_raw_ops;
 	fmt->private = (void *) mda_lists;
@@ -2576,32 +2264,6 @@ struct format_type *create_text_format(struct cmd_context *cmd)
 		goto bad;
 	}
 
-	if ((cn = find_config_tree_array(cmd, metadata_dirs_CFG, NULL))) {
-		for (cv = cn->v; cv; cv = cv->next) {
-			if (cv->type != DM_CFG_STRING) {
-				log_error("Invalid string in config file: "
-					  "metadata/dirs");
-				goto bad;
-			}
-
-			if (!_add_dir(cv->v.str, &mda_lists->dirs)) {
-				log_error("Failed to add %s to text format "
-					  "metadata directory list ", cv->v.str);
-				goto bad;
-			}
-			cmd->independent_metadata_areas = 1;
-		}
-	}
-
-	if ((cn = find_config_tree_node(cmd, metadata_disk_areas_CFG_SUBSECTION, NULL))) {
-		/* FIXME: disk_areas do not work with lvmetad - the "id" can't be found. */
-		for (cn = cn->child; cn; cn = cn->sib) {
-			if (!_get_config_disk_area(cmd, cn, &mda_lists->raws))
-				goto_bad;
-			cmd->independent_metadata_areas = 1;
-		}
-	}
-
 	if (!(fmt->orphan_vg = alloc_vg("text_orphan", cmd, fmt->orphan_vg_name)))
 		goto_bad;
 
diff --git a/lib/format_text/layout.h b/lib/format_text/layout.h
index 0a63708..e1462f1 100644
--- a/lib/format_text/layout.h
+++ b/lib/format_text/layout.h
@@ -84,8 +84,6 @@ struct mda_header *raw_read_mda_header(const struct format_type *fmt,
 				       struct device_area *dev_area, int primary_mda);
 
 struct mda_lists {
-	struct dm_list dirs;
-	struct dm_list raws;
 	struct metadata_area_ops *file_ops;
 	struct metadata_area_ops *raw_ops;
 };
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index a4308bc..40854de 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -4026,9 +4026,6 @@ static struct volume_group *_vg_read(struct cmd_context *cmd,
 
 		inconsistent = 0;
 
-		/* Independent MDAs aren't supported under low memory */
-		if (!cmd->independent_metadata_areas && prioritized_section())
-			return_NULL;
 		if (!(fmt = lvmcache_fmt_from_vgname(cmd, vgname, vgid, 0)))
 			return_NULL;
 
@@ -5211,15 +5208,6 @@ uint32_t vg_lock_newname(struct cmd_context *cmd, const char *vgname)
 	if (!lvmcache_fmt_from_vgname(cmd, vgname, NULL, 1)) {
 		lvmcache_label_scan(cmd);
 		if (!lvmcache_fmt_from_vgname(cmd, vgname, NULL, 1)) {
-			/* Independent MDAs aren't supported under low memory */
-			if (!cmd->independent_metadata_areas && critical_section()) {
-				/*
-				 * FIXME: Disallow calling this function if
-				 * critical_section() is true.
-				 */
-				unlock_vg(cmd, NULL, vgname);
-				return FAILED_LOCKING;
-			}
 			lvmcache_label_scan(cmd);
 			if (!lvmcache_fmt_from_vgname(cmd, vgname, NULL, 0))
 				return SUCCESS; /* vgname not found after scanning */




More information about the lvm-devel mailing list