mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Refactor _text_pv_read and always return mda list if requested.
This commit is contained in:
parent
6ce652e3ec
commit
29f7cbdabf
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.40 -
|
Version 2.02.40 -
|
||||||
================================
|
================================
|
||||||
|
Refactor _text_pv_read and always return mda list if requested.
|
||||||
Fix configure to work w/o readline unless --enable-readline used. (2.02.39)
|
Fix configure to work w/o readline unless --enable-readline used. (2.02.39)
|
||||||
Remove is_lvm_partition template which has not yet been coded.
|
Remove is_lvm_partition template which has not yet been coded.
|
||||||
Refactor pvcreate to separate parameter parsing from validation logic.
|
Refactor pvcreate to separate parameter parsing from validation logic.
|
||||||
|
@ -1396,43 +1396,33 @@ static int _add_raw(struct list *raw_list, struct device_area *dev_area)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _text_pv_read(const struct format_type *fmt, const char *pv_name,
|
static int _get_pv_if_in_vg(struct lvmcache_info *info,
|
||||||
struct physical_volume *pv, struct list *mdas)
|
struct physical_volume *pv)
|
||||||
{
|
{
|
||||||
struct label *label;
|
|
||||||
struct device *dev;
|
|
||||||
struct lvmcache_info *info;
|
|
||||||
struct metadata_area *mda, *mda_new;
|
|
||||||
struct mda_context *mdac, *mdac_new;
|
|
||||||
struct data_area_list *da;
|
|
||||||
|
|
||||||
if (!(dev = dev_cache_get(pv_name, fmt->cmd->filter)))
|
|
||||||
return_0;
|
|
||||||
|
|
||||||
/* FIXME Optimise out repeated reading when cache lock held */
|
|
||||||
if (!(label_read(dev, &label, UINT64_C(0))))
|
|
||||||
return_0;
|
|
||||||
info = (struct lvmcache_info *) label->info;
|
|
||||||
|
|
||||||
/* Have we already cached vgname? */
|
|
||||||
if (info->vginfo && info->vginfo->vgname &&
|
if (info->vginfo && info->vginfo->vgname &&
|
||||||
!is_orphan_vg(info->vginfo->vgname) &&
|
!is_orphan_vg(info->vginfo->vgname) &&
|
||||||
get_pv_from_vg_by_id(info->fmt, info->vginfo->vgname,
|
get_pv_from_vg_by_id(info->fmt, info->vginfo->vgname,
|
||||||
info->vginfo->vgid, info->dev->pvid, pv)) {
|
info->vginfo->vgid, info->dev->pvid, pv))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _populate_pv_fields(struct lvmcache_info *info,
|
||||||
|
struct physical_volume *pv)
|
||||||
|
{
|
||||||
|
struct data_area_list *da;
|
||||||
|
|
||||||
|
/* Have we already cached vgname? */
|
||||||
|
if (_get_pv_if_in_vg(info, pv))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
/* Perform full scan (just the first time) and try again */
|
/* Perform full scan (just the first time) and try again */
|
||||||
if (!memlock() && !full_scan_done()) {
|
if (!memlock() && !full_scan_done()) {
|
||||||
lvmcache_label_scan(fmt->cmd, 2);
|
lvmcache_label_scan(info->fmt->cmd, 2);
|
||||||
|
|
||||||
if (info->vginfo && info->vginfo->vgname &&
|
if (_get_pv_if_in_vg(info, pv))
|
||||||
!is_orphan_vg(info->vginfo->vgname) &&
|
|
||||||
get_pv_from_vg_by_id(info->fmt, info->vginfo->vgname,
|
|
||||||
info->vginfo->vgid,
|
|
||||||
info->dev->pvid, pv)) {
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Orphan */
|
/* Orphan */
|
||||||
@ -1445,13 +1435,35 @@ static int _text_pv_read(const struct format_type *fmt, const char *pv_name,
|
|||||||
/* Currently only support exactly one data area */
|
/* Currently only support exactly one data area */
|
||||||
if (list_size(&info->das) != 1) {
|
if (list_size(&info->das) != 1) {
|
||||||
log_error("Must be exactly one data area (found %d) on PV %s",
|
log_error("Must be exactly one data area (found %d) on PV %s",
|
||||||
list_size(&info->das), dev_name(dev));
|
list_size(&info->das), dev_name(info->dev));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_iterate_items(da, &info->das)
|
list_iterate_items(da, &info->das)
|
||||||
pv->pe_start = da->disk_locn.offset >> SECTOR_SHIFT;
|
pv->pe_start = da->disk_locn.offset >> SECTOR_SHIFT;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _text_pv_read(const struct format_type *fmt, const char *pv_name,
|
||||||
|
struct physical_volume *pv, struct list *mdas)
|
||||||
|
{
|
||||||
|
struct label *label;
|
||||||
|
struct device *dev;
|
||||||
|
struct lvmcache_info *info;
|
||||||
|
struct metadata_area *mda, *mda_new;
|
||||||
|
struct mda_context *mdac, *mdac_new;
|
||||||
|
|
||||||
|
if (!(dev = dev_cache_get(pv_name, fmt->cmd->filter)))
|
||||||
|
return_0;
|
||||||
|
|
||||||
|
if (!(label_read(dev, &label, UINT64_C(0))))
|
||||||
|
return_0;
|
||||||
|
info = (struct lvmcache_info *) label->info;
|
||||||
|
|
||||||
|
if (!_populate_pv_fields(info, pv))
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!mdas)
|
if (!mdas)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user