static int tapdisk_vbd_validate_chain(td_vbd_t *vbd) { int err; td_image_t *image, *parent, *tmp; DPRINTF("VBD CHAIN:\n"); tapdisk_vbd_for_each_image(vbd, image, tmp) { DPRINTF("%s: %d\n", image->name, image->type); if (tapdisk_vbd_is_last_image(vbd, image)) break; parent = tapdisk_vbd_next_image(image); err = td_validate_parent(image, parent); if (err) return err; }
int tapdisk_image_validate_chain(struct list_head *head) { td_image_t *image, *parent; int flags, err; INFO("VBD CHAIN:\n"); tapdisk_for_each_image_reverse(parent, head) { image = tapdisk_image_entry(parent->next.prev); if (image == tapdisk_image_entry(head)) break; err = td_validate_parent(image, parent); if (err) return err; flags = tapdisk_disk_types[image->type]->flags; if (flags & DISK_TYPE_FILTER) { image->driver->info = parent->driver->info; image->info = parent->info; } }