[lvm2] Additional lvmetad fixes.

Peter Rajnoha prajnoha at fedoraproject.org
Tue May 14 11:07:08 UTC 2013


commit ebb8908593ea31d3536b5a56a71bb6a33a8d67e7
Author: Peter Rajnoha <prajnoha at redhat.com>
Date:   Tue May 14 12:59:57 2013 +0200

    Additional lvmetad fixes.

 ...-of-reappeared-and-missing-pvs-in-lvmetad.patch |   64 ++++++++++++++++++++
 ..._99-lvmetad-fix-a-race-in-metadata-update.patch |   15 +++--
 lvm2.spec                                          |   22 ++++---
 3 files changed, 85 insertions(+), 16 deletions(-)
---
diff --git a/lvm2-2_02_99-fix-handling-of-reappeared-and-missing-pvs-in-lvmetad.patch b/lvm2-2_02_99-fix-handling-of-reappeared-and-missing-pvs-in-lvmetad.patch
new file mode 100644
index 0000000..446e50a
--- /dev/null
+++ b/lvm2-2_02_99-fix-handling-of-reappeared-and-missing-pvs-in-lvmetad.patch
@@ -0,0 +1,64 @@
+commit 5bad6200b66259dde0c1cf3bd6295e65a5ade3c9
+Author: Peter Rajnoha <prajnoha at redhat.com>
+Date:   Tue May 14 12:57:54 2013 +0200
+
+    lvm2-2_02_99-fix-handling-of-reappeared-and-missing-pvs-in-lvmetad.patch
+---
+ lib/cache/lvmetad.c     | 8 +++++++-
+ lib/metadata/metadata.c | 4 ++--
+ lib/metadata/metadata.h | 3 +++
+ 3 files changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
+index a636f43..d8ad4dd 100644
+--- a/lib/cache/lvmetad.c
++++ b/lib/cache/lvmetad.c
+@@ -354,14 +354,20 @@ struct volume_group *lvmetad_vg_lookup(struct cmd_context *cmd, const char *vgna
+ 			if ((info = lvmcache_info_from_pvid((const char *)&pvl->pv->id, 0))) {
+ 				pvl->pv->label_sector = lvmcache_get_label(info)->sector;
+ 				pvl->pv->dev = lvmcache_device(info);
++				if (!pvl->pv->dev)
++					pvl->pv->status |= MISSING_PV;
++				else
++					check_reappeared_pv(vg, pvl->pv);
+ 				if (!lvmcache_fid_add_mdas_pv(info, fid)) {
+ 					vg = NULL;
+ 					goto_out;	/* FIXME error path */
+ 				}
+-			} /* else probably missing */
++			} else
++				pvl->pv->status |= MISSING_PV; /* probably missing */
+ 		}
+ 
+ 		lvmcache_update_vg(vg, 0);
++		vg_mark_partial_lvs(vg, 1);
+ 	}
+ 
+ out:
+diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
+index c210a63..2cca93c 100644
+--- a/lib/metadata/metadata.c
++++ b/lib/metadata/metadata.c
+@@ -2870,8 +2870,8 @@ int vg_missing_pv_count(const struct volume_group *vg)
+ 	return ret;
+ }
+ 
+-static void check_reappeared_pv(struct volume_group *correct_vg,
+-				struct physical_volume *pv)
++void check_reappeared_pv(struct volume_group *correct_vg,
++			 struct physical_volume *pv)
+ {
+ 	struct pv_list *pvl;
+ 
+diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h
+index 19bf742..630c4ca 100644
+--- a/lib/metadata/metadata.h
++++ b/lib/metadata/metadata.h
+@@ -492,4 +492,7 @@ int is_mirror_image_removable(struct logical_volume *mimage_lv, void *baton);
+ uint64_t find_min_mda_size(struct dm_list *mdas);
+ char *tags_format_and_copy(struct dm_pool *mem, const struct dm_list *tags);
+ 
++void check_reappeared_pv(struct volume_group *correct_vg,
++			 struct physical_volume *pv);
++
+ #endif
diff --git a/lvm2-2_02_99-lvmetad-fix-a-race-in-metadata-update.patch b/lvm2-2_02_99-lvmetad-fix-a-race-in-metadata-update.patch
index cd7f808..9e5a178 100644
--- a/lvm2-2_02_99-lvmetad-fix-a-race-in-metadata-update.patch
+++ b/lvm2-2_02_99-lvmetad-fix-a-race-in-metadata-update.patch
@@ -1,12 +1,12 @@
-commit 6283dc16f6ad54a08aae5f5d0c43bb4973e0ffc1
+commit 98c5eb308690d990b957012db9d48b6722ea93cb
 Author: Peter Rajnoha <prajnoha at redhat.com>
-Date:   Tue May 14 11:05:31 2013 +0200
+Date:   Tue May 14 12:47:24 2013 +0200
 
     lvm2-2_02_99-lvmetad-fix-a-race-in-metadata-update.patch
 ---
  WHATS_NEW                      |  1 +
- daemons/lvmetad/lvmetad-core.c | 18 ++++++++++--------
- 2 files changed, 11 insertions(+), 8 deletions(-)
+ daemons/lvmetad/lvmetad-core.c | 21 +++++++++++++--------
+ 2 files changed, 14 insertions(+), 8 deletions(-)
 
 diff --git a/WHATS_NEW b/WHATS_NEW
 index 20a8125..35c5e43 100644
@@ -20,7 +20,7 @@ index 20a8125..35c5e43 100644
    Fix possible deadlock when querying and updating lvmetad at the same time.
    Avoid a global lock in pvs when lvmetad is in use.
 diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
-index fed9296..1e7470b 100644
+index fed9296..1f855a7 100644
 --- a/daemons/lvmetad/lvmetad-core.c
 +++ b/daemons/lvmetad/lvmetad-core.c
 @@ -450,7 +450,8 @@ static response vg_lookup(lvmetad_state *s, request r)
@@ -61,7 +61,7 @@ index fed9296..1e7470b 100644
  	}
  
  	lock_vgid_to_metadata(s);
-@@ -750,14 +749,17 @@ static int update_metadata(lvmetad_state *s, const char *name, const char *_vgid
+@@ -750,14 +749,20 @@ static int update_metadata(lvmetad_state *s, const char *name, const char *_vgid
  		  dm_hash_insert(s->vgid_to_metadata, vgid, cft) &&
  		  dm_hash_insert(s->vgid_to_vgname, vgid, cfgname) &&
  		  dm_hash_insert(s->vgname_to_vgid, name, (void*) vgid)) ? 1 : 0;
@@ -69,6 +69,9 @@ index fed9296..1e7470b 100644
 +	if (retval && oldname && strcmp(name, oldname))
 +		dm_hash_remove(s->vgname_to_vgid, oldname);
 +
++	if (haveseq >= 0 && haveseq < seq)
++		dm_config_destroy(old);
++
  	unlock_vgid_to_metadata(s);
  
  	if (retval)
diff --git a/lvm2.spec b/lvm2.spec
index 7c3a510..2fd8f65 100644
--- a/lvm2.spec
+++ b/lvm2.spec
@@ -65,11 +65,12 @@ Patch19: lvm2-2_02_99-avoid-global-lock-in-pvs-when-lvmetad-is-in-use.patch
 Patch20: lvm2-2_02_99-fix-possible-deadlock-in-lvmetad-for-parallel-update-and-query.patch
 Patch21: lvm2-2_02_99-fix-possible-race-in-lvmetad-remove_metadata.patch
 Patch22: lvm2-2_02_99-lvmetad-fix-a-race-in-metadata-update.patch
-Patch23: lvm2-2_02_99-fix-blkdeactivate-handling-of-nested-mountpoints-and-mangled-mount-paths.patch
-Patch24: lvm2-2_02_99-add-dm-disable-udev-env-var-and-fix-noudevsync-arg.patch
-Patch25: lvm2-2_02_99-fix-premature-dm-version-checking-which-caused-useless-mapper-control-access.patch
-Patch26: lvm2-2_02_99-close-dmeventd-fifo-fds-on-exec.patch
-Patch27: lvm2-2_02_99-fix-dmsetup-splitname-to-not-fail-if-used-without-c-switch.patch
+Patch23: lvm2-2_02_99-fix-handling-of-reappeared-and-missing-pvs-in-lvmetad.patch
+Patch24: lvm2-2_02_99-fix-blkdeactivate-handling-of-nested-mountpoints-and-mangled-mount-paths.patch
+Patch25: lvm2-2_02_99-add-dm-disable-udev-env-var-and-fix-noudevsync-arg.patch
+Patch26: lvm2-2_02_99-fix-premature-dm-version-checking-which-caused-useless-mapper-control-access.patch
+Patch27: lvm2-2_02_99-close-dmeventd-fifo-fds-on-exec.patch
+Patch28: lvm2-2_02_99-fix-dmsetup-splitname-to-not-fail-if-used-without-c-switch.patch
 
 BuildRequires: libselinux-devel >= %{libselinux_version}, libsepol-devel
 BuildRequires: ncurses-devel
@@ -127,11 +128,12 @@ or more physical volumes and creating one or more logical volumes
 %patch20 -p1 -b .lvmetad_deadlock
 %patch21 -p1 -b .lvmetad_race_on_remove
 %patch22 -p1 -b .lvmetad_race_on_update
-%patch23 -p1 -b .blkdeactivate
-%patch24 -p1 -b .dm_disable_udev
-%patch25 -p1 -b .premature_dm_version
-%patch26 -p1 -b .dmeventd_fd_cloexec
-%patch27 -p1 -b .dmsetup_splitname
+%patch23 -p1 -b .lvmetad_missing_reappear_pv
+%patch24 -p1 -b .blkdeactivate
+%patch25 -p1 -b .dm_disable_udev
+%patch26 -p1 -b .premature_dm_version
+%patch27 -p1 -b .dmeventd_fd_cloexec
+%patch28 -p1 -b .dmsetup_splitname
 
 %build
 %define _default_pid_dir /run


More information about the scm-commits mailing list