From: Dave Wysochanski Date: Sun, 26 Jul 2009 01:54:20 +0000 (+0000) Subject: Move ORPHAN_VG lock outside pvcreate_single. X-Git-Tag: old-v2_02_50~70 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=3a821c040e5cb8666f0057045fb61bed7bb38891;p=lvm2.git Move ORPHAN_VG lock outside pvcreate_single. The implicit pvcreate require either moving the ORPHAN_VG lock outside pvcreate_single or somehow having the function know or detect whether the ORPHAN_VG lock is already held. Author: Dave Wysochanski --- diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index aa25b3a41..4031ea68c 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -1142,11 +1142,6 @@ pv_t * pvcreate_single(struct cmd_context *cmd, const char *pv_name, } } - if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) { - log_error("Can't get lock for orphan PVs"); - return NULL; - } - if (!pvcreate_check(cmd, pv_name, pp)) goto error; @@ -1203,11 +1198,9 @@ pv_t * pvcreate_single(struct cmd_context *cmd, const char *pv_name, log_print("Physical volume \"%s\" successfully created", pv_name); - unlock_vg(cmd, VG_ORPHANS); return pv; error: - unlock_vg(cmd, VG_ORPHANS); return NULL; } diff --git a/tools/pvcreate.c b/tools/pvcreate.c index e21fe9437..8595339b3 100644 --- a/tools/pvcreate.c +++ b/tools/pvcreate.c @@ -171,9 +171,15 @@ int pvcreate(struct cmd_context *cmd, int argc, char **argv) } for (i = 0; i < argc; i++) { + if (!lock_vol(cmd, VG_ORPHANS, LCK_VG_WRITE)) { + log_error("Can't get lock for orphan PVs"); + return ECMD_FAILED; + } + if (!pvcreate_single(cmd, argv[i], &pp)) ret = ECMD_FAILED; + unlock_vg(cmd, VG_ORPHANS); if (sigint_caught()) return ret; }