diff options
author | Alasdair Kergon <agk@redhat.com> | 2007-11-02 20:40:05 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2007-11-02 20:40:05 +0000 |
commit | d38bf3616cc3ec1675894cb012297795897c1b50 (patch) | |
tree | 2b1113859a8d4fc47a8464cfdaaf0a6616c1ada2 /tools/pvdisplay.c | |
parent | 9c1dbeb3f18b34de8199e4a31d2465dd3b9624f4 (diff) | |
download | lvm2-d38bf3616cc3ec1675894cb012297795897c1b50.tar.gz |
Fix orphan-related locking in pvdisplay and pvs.
Fix missing VG unlocks in some pvchange error paths.
Add some missing validation of VG names.
Rename validate_vg_name() to validate_new_vg_name().
Change orphan lock to VG_ORPHANS.
Change format1 to use ORPHAN as orphan VG name.
Diffstat (limited to 'tools/pvdisplay.c')
-rw-r--r-- | tools/pvdisplay.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/tools/pvdisplay.c b/tools/pvdisplay.c index e77bbce2d..495705942 100644 --- a/tools/pvdisplay.c +++ b/tools/pvdisplay.c @@ -25,15 +25,17 @@ static int _pvdisplay_single(struct cmd_context *cmd, uint64_t size; const char *pv_name = pv_dev_name(pv); + const char *vg_name = NULL; - if (pv_vg_name(pv)) { - if (!lock_vol(cmd, pv_vg_name(pv), LCK_VG_READ)) { - log_error("Can't lock %s: skipping", pv_vg_name(pv)); + if (!is_orphan(pv)) { + vg_name = pv_vg_name(pv); + if (!lock_vol(cmd, vg_name, LCK_VG_READ)) { + log_error("Can't lock %s: skipping", vg_name); return ECMD_FAILED; } - if (!(vg = vg_read(cmd, pv_vg_name(pv), (char *)&pv->vgid, &consistent))) { - log_error("Can't read %s: skipping", pv_vg_name(pv)); + if (!(vg = vg_read(cmd, vg_name, (char *)&pv->vgid, &consistent))) { + log_error("Can't read %s: skipping", vg_name); goto out; } @@ -87,8 +89,8 @@ static int _pvdisplay_single(struct cmd_context *cmd, pvdisplay_segments(pv); out: - if (pv_vg_name(pv)) - unlock_vg(cmd, pv_vg_name(pv)); + if (vg_name) + unlock_vg(cmd, vg_name); return ret; } |