static int virStorageBackendMpathNewVol(virStoragePoolObjPtr pool, const int devnum, const char *dev) { virStorageVolDefPtr vol; int ret = -1; if (VIR_ALLOC(vol) < 0) { virReportOOMError(); goto cleanup; } vol->type = VIR_STORAGE_VOL_BLOCK; if (virAsprintf(&(vol->name), "dm-%u", devnum) < 0) { virReportOOMError(); goto cleanup; } if (virAsprintf(&vol->target.path, "/dev/%s", dev) < 0) { virReportOOMError(); goto cleanup; } if (virStorageBackendMpathUpdateVolTargetInfo(&vol->target, &vol->allocation, &vol->capacity) < 0) { goto cleanup; } /* XXX should use logical unit's UUID instead */ vol->key = strdup(vol->target.path); if (vol->key == NULL) { virReportOOMError(); goto cleanup; } if (VIR_REALLOC_N(pool->volumes.objs, pool->volumes.count + 1) < 0) { virReportOOMError(); goto cleanup; } pool->volumes.objs[pool->volumes.count++] = vol; pool->def->capacity += vol->capacity; pool->def->allocation += vol->allocation; ret = 0; cleanup: if (ret != 0) virStorageVolDefFree(vol); return ret; }
static int virStorageBackendMpathNewVol(virStoragePoolObjPtr pool, const int devnum, const char *dev) { virStorageVolDefPtr vol; int ret = -1; if (VIR_ALLOC(vol) < 0) goto cleanup; vol->type = VIR_STORAGE_VOL_BLOCK; if (virAsprintf(&(vol->name), "dm-%u", devnum) < 0) goto cleanup; if (virAsprintf(&vol->target.path, "/dev/%s", dev) < 0) goto cleanup; if (virStorageBackendMpathUpdateVolTargetInfo(&vol->target, &vol->allocation, &vol->capacity) < 0) { goto cleanup; } /* XXX should use logical unit's UUID instead */ if (VIR_STRDUP(vol->key, vol->target.path) < 0) goto cleanup; if (VIR_APPEND_ELEMENT_COPY(pool->volumes.objs, pool->volumes.count, vol) < 0) goto cleanup; pool->def->capacity += vol->capacity; pool->def->allocation += vol->allocation; ret = 0; cleanup: if (ret != 0) virStorageVolDefFree(vol); return ret; }