mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
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.
This commit is contained in:
parent
bc0a902434
commit
c2ca1a707a
@ -144,8 +144,10 @@ struct config_node *pvs(struct config_tree *vg)
|
||||
|
||||
/* 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 @@ static void update_pv_status(lvmetad_state *s, struct config_tree *vg)
|
||||
// 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 @@ static response pv_add(lvmetad_state *s, request r)
|
||||
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 @@ static response pv_add(lvmetad_state *s, request r)
|
||||
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",
|
||||
|
Loading…
Reference in New Issue
Block a user