[lvm-devel] LVM2/daemons/lvmetad lvmetad-core.c
mornfall at sourceware.org
mornfall at sourceware.org
Wed Jul 20 21:33:41 UTC 2011
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: mornfall at sourceware.org 2011-07-20 21:33:41
Modified files:
daemons/lvmetad: lvmetad-core.c
Log message:
lvmetad: Obliterate vg_status by returning the same information from
update_pv_status, saving a dozen lines of code and execution time of one
walkthrough of the PV list.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/daemons/lvmetad/lvmetad-core.c.diff?cvsroot=lvm2&r1=1.18&r2=1.19
--- LVM2/daemons/lvmetad/lvmetad-core.c 2011/07/20 21:27:28 1.18
+++ LVM2/daemons/lvmetad/lvmetad-core.c 2011/07/20 21:33:41 1.19
@@ -144,8 +144,10 @@
/* Either the "big" vgs lock, or a per-vg lock needs to be held before entering
* this function. */
-static void update_pv_status(lvmetad_state *s, struct config_tree *vg)
+static int update_pv_status(lvmetad_state *s, struct config_tree *vg)
{
+ int complete = 1;
+
lock_pvs(s);
struct config_node *pv = pvs(vg);
while (pv) {
@@ -154,30 +156,13 @@
// TODO: avoid the override here if MISSING came from the actual
// metadata, as opposed from our manipulation...
set_flag(vg, pv, "status", "MISSING", !found);
+ if (!found)
+ complete = 0;
pv = pv->sib;
}
unlock_pvs(s);
-}
-
-static int vg_status(lvmetad_state *s, const char *vgid)
-{
- struct config_tree *vg = lock_vg(s, vgid);
- struct config_node *pv = pvs(vg);
- while (pv) {
- const char *uuid = find_config_str(pv->child, "id", NULL);
- lock_pvs(s);
- int found = uuid ? (dm_hash_lookup(s->pvs, uuid) ? 1 : 0) : 0;
- unlock_pvs(s);
- if (!found) {
- unlock_vg(s, vgid);
- return 0;
- }
- pv = pv->sib;
- }
-
- unlock_vg(s, vgid);
- return 1;
+ return complete;
}
/* You need to be holding the pvid_map lock already to call this. */
@@ -269,6 +254,8 @@
if (!pvid)
return daemon_reply_simple("failed", "reason = %s", "need PV UUID", NULL);
+ debug("pv_add %s, vgid = %s\n", pvid, vgid);
+
lock_pvs(s);
dm_hash_insert(s->pvs, pvid, (void*)1);
unlock_pvs(s);
@@ -288,14 +275,13 @@
unlock_pvid_map(s);
}
+ int complete = 0;
if (vgid) {
struct config_tree *cft = lock_vg(s, vgid);
- update_pv_status(s, cft);
+ complete = update_pv_status(s, cft);
unlock_vg(s, vgid);
}
- int complete = vgid ? vg_status(s, vgid) : 0;
-
return daemon_reply_simple("OK",
"status = %s", complete ? "complete" : "partial",
"vgid = %s", vgid ? vgid : "#orphan",
More information about the lvm-devel
mailing list