338
info->device_size = xlate32(dl->pvd.pv_size) << SECTOR_SHIFT;
339
dm_list_init(&info->mdas);
340
info->status &= ~CACHE_INVALID;
338
lvmcache_set_device_size(info, xlate32(dl->pvd.pv_size) << SECTOR_SHIFT);
339
lvmcache_del_mdas(info);
340
lvmcache_make_valid(info);
343
343
static struct disk_list *__read_disk(const struct format_type *fmt,
451
451
dm_list_add(head, &data->list);
454
struct _read_pvs_in_vg_baton {
456
struct dm_list *head;
457
struct disk_list *data;
462
static int _read_pv_in_vg(struct lvmcache_info *info, void *baton)
464
struct _read_pvs_in_vg_baton *b = baton;
468
if (!lvmcache_device(info) ||
469
!(b->data = read_disk(lvmcache_fmt(info), lvmcache_device(info), b->mem, b->vg_name)))
470
return 0; /* stop here */
472
_add_pv_to_list(b->head, b->data);
455
477
* Build a list of pv_d's structures, allocated from mem.
456
478
* We keep track of the first object allocated from the pool
463
485
struct dev_iter *iter;
464
486
struct device *dev;
465
struct disk_list *data = NULL;
466
487
struct lvmcache_vginfo *vginfo;
467
struct lvmcache_info *info;
488
struct _read_pvs_in_vg_baton baton;
494
baton.vg_name = vg_name;
469
496
/* Fast path if we already saw this VG and cached the list of PVs */
470
if (vg_name && (vginfo = vginfo_from_vgname(vg_name, NULL)) &&
472
dm_list_iterate_items(info, &vginfo->infos) {
474
if (!dev || !(data = read_disk(fmt, dev, mem, vg_name)))
476
_add_pv_to_list(head, data);
497
if (vg_name && (vginfo = lvmcache_vginfo_from_vgname(vg_name, NULL))) {
499
lvmcache_foreach_pv(vginfo, _read_pv_in_vg, &baton);
502
/* Did we find the whole VG? */
503
if (!vg_name || is_orphan_vg(vg_name) ||
504
(baton.data && *baton.data->pvd.vg_name &&
505
dm_list_size(head) == baton.data->vgd.pv_cur))
510
/* vgcache_del(vg_name); */
479
/* Did we find the whole VG? */
480
if (!vg_name || is_orphan_vg(vg_name) ||
481
(data && *data->pvd.vg_name &&
482
dm_list_size(head) == data->vgd.pv_cur))
487
/* vgcache_del(vg_name); */
490
514
if (!(iter = dev_iter_create(filter, 1))) {
495
519
/* Otherwise do a complete scan */
496
520
for (dev = dev_iter_get(iter); dev; dev = dev_iter_get(iter)) {
497
if ((data = read_disk(fmt, dev, mem, vg_name))) {
498
_add_pv_to_list(head, data);
521
if ((baton.data = read_disk(fmt, dev, mem, vg_name))) {
522
_add_pv_to_list(head, baton.data);
501
525
dev_iter_destroy(iter);