diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng index 6da3c11ac1d1d6a171d5d3dbf1303bda48f12ed8..a4ef5aff0c6962ca4067bf1577b5239031b0a28f 100644 --- a/docs/schemas/storagepool.rng +++ b/docs/schemas/storagepool.rng @@ -62,7 +62,7 @@ - + @@ -207,6 +207,17 @@ + + + + + + + + + + + diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index d6df1ed71f48ca54a3566f39535656cc457800dc..002663f1e4e3f92aecbec8b5099e2d8ec81dc4d8 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1,7 +1,7 @@ /* * storage_conf.c: config handling for storage driver * - * Copyright (C) 2006-2012 Red Hat, Inc. + * Copyright (C) 2006-2013 Red Hat, Inc. * Copyright (C) 2006-2008 Daniel P. Berrange * * This library is free software; you can redistribute it and/or @@ -956,10 +956,17 @@ virStoragePoolDefParseXML(xmlXPathContextPtr ctxt) /* When we are working with a virtual disk we can skip the target * path and permissions */ if (!(options->flags & VIR_STORAGE_POOL_SOURCE_NETWORK)) { - if (!(target_path = virXPathString("string(./target/path)", ctxt))) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("missing storage pool target path")); - goto error; + if (ret->type == VIR_STORAGE_POOL_LOGICAL) { + if (virAsprintf(&target_path, "/dev/%s", ret->source.name) < 0) { + goto error; + } + } else { + target_path = virXPathString("string(./target/path)", ctxt); + if (!target_path) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing storage pool target path")); + goto error; + } } ret->target.path = virFileSanitizePath(target_path); if (!ret->target.path) diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c index 416a0424fe2536dba8596f90d77476ed7ddfc007..8998a11b92158c93de7853c49dce4b69842a0773 100644 --- a/src/storage/storage_backend_logical.c +++ b/src/storage/storage_backend_logical.c @@ -454,17 +454,7 @@ virStorageBackendLogicalCheckPool(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool, bool *isActive) { - char *path; - - *isActive = false; - if (virAsprintf(&path, "/dev/%s", pool->def->source.name) < 0) - return -1; - - if (access(path, F_OK) == 0) - *isActive = true; - - VIR_FREE(path); - + *isActive = (access(pool->def->target.path, F_OK) == 0); return 0; } @@ -794,21 +784,16 @@ virStorageBackendLogicalDeleteVol(virConnectPtr conn ATTRIBUTE_UNUSED, unsigned int flags) { int ret = -1; - char *volpath = NULL; virCommandPtr lvchange_cmd = NULL; virCommandPtr lvremove_cmd = NULL; virCheckFlags(0, -1); - if (virAsprintf(&volpath, "%s/%s", - pool->def->source.name, vol->name) < 0) - goto cleanup; - virFileWaitForDevices(); - lvchange_cmd = virCommandNewArgList(LVCHANGE, "-aln", volpath, NULL); - lvremove_cmd = virCommandNewArgList(LVREMOVE, "-f", volpath, NULL); + lvchange_cmd = virCommandNewArgList(LVCHANGE, "-aln", vol->target.path, NULL); + lvremove_cmd = virCommandNewArgList(LVREMOVE, "-f", vol->target.path, NULL); if (virCommandRun(lvremove_cmd, NULL) < 0) { if (virCommandRun(lvchange_cmd, NULL) < 0) { @@ -821,7 +806,6 @@ virStorageBackendLogicalDeleteVol(virConnectPtr conn ATTRIBUTE_UNUSED, ret = 0; cleanup: - VIR_FREE(volpath); virCommandFree(lvchange_cmd); virCommandFree(lvremove_cmd); return ret; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index a8eb731aec2eec30f421fbbbb66e0b6f972dd80f..43bf6dece5f19b48be6a128f0c9d563202424303 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -1,7 +1,7 @@ /* * storage_driver.c: core driver for storage APIs * - * Copyright (C) 2006-2012 Red Hat, Inc. + * Copyright (C) 2006-2013 Red Hat, Inc. * Copyright (C) 2006-2008 Daniel P. Berrange * * This library is free software; you can redistribute it and/or diff --git a/tests/storagepoolxml2xmlin/pool-logical-create.xml b/tests/storagepoolxml2xmlin/pool-logical-create.xml index 4c670899da5e0f61ce573c2c43f372dcd64a90e1..fd551e016b25f8bcfbacac6a8fee5cfed7fc74f8 100644 --- a/tests/storagepoolxml2xmlin/pool-logical-create.xml +++ b/tests/storagepoolxml2xmlin/pool-logical-create.xml @@ -10,7 +10,7 @@ - /dev/HostVG + /invalid/nonexistent/path 0700 0 diff --git a/tests/storagepoolxml2xmlin/pool-logical-nopath.xml b/tests/storagepoolxml2xmlin/pool-logical-nopath.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1bb4db48c164b30bae1a59dace4bee2efb141d2 --- /dev/null +++ b/tests/storagepoolxml2xmlin/pool-logical-nopath.xml @@ -0,0 +1,19 @@ + + HostVG + 1c13165a-d0f4-3aee-b447-30fb38789091 + 99891544064 + 99220455424 + 671088640 + + + + + + + + 0700 + 0 + 0 + + + diff --git a/tests/storagepoolxml2xmlout/pool-logical-nopath.xml b/tests/storagepoolxml2xmlout/pool-logical-nopath.xml new file mode 100644 index 0000000000000000000000000000000000000000..7413f1cfe46198d6073dd36536af94bfce963cb8 --- /dev/null +++ b/tests/storagepoolxml2xmlout/pool-logical-nopath.xml @@ -0,0 +1,22 @@ + + HostVG + 1c13165a-d0f4-3aee-b447-30fb38789091 + 0 + 0 + 0 + + + + + HostVG + + + + /dev/HostVG + + 0700 + 0 + 0 + + + diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c index 53a7f83ca177dfda56d2877fa906f773e87e6ed3..d59cff9746ab610a7ac2602c3f3f38d9ea0140ab 100644 --- a/tests/storagepoolxml2xmltest.c +++ b/tests/storagepoolxml2xmltest.c @@ -87,6 +87,7 @@ mymain(void) DO_TEST("pool-dir"); DO_TEST("pool-fs"); DO_TEST("pool-logical"); + DO_TEST("pool-logical-nopath"); DO_TEST("pool-logical-create"); DO_TEST("pool-disk"); DO_TEST("pool-iscsi");