if (virStorageVolDeleteEnsureACL(obj->conn, pool->def, vol) < 0)
goto cleanup;
+ if (vol->in_use) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("volume '%s' is still in use."),
+ vol->name);
+ goto cleanup;
+ }
+
if (vol->building) {
virReportError(VIR_ERR_OPERATION_INVALID,
_("volume '%s' is still being allocated."),
/* Drop the pool lock during volume allocation */
pool->asyncjobs++;
- origvol->building = 1;
newvol->building = 1;
+ origvol->in_use++;
virStoragePoolObjUnlock(pool);
if (origpool) {
virStoragePoolObjLock(origpool);
storageDriverUnlock(driver);
- origvol->building = 0;
+ origvol->in_use--;
newvol->building = 0;
allocation = newvol->target.allocation;
pool->asyncjobs--;
if (virStorageVolUploadEnsureACL(obj->conn, pool->def, vol) < 0)
goto cleanup;
+ if (vol->in_use) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("volume '%s' is still in use."),
+ vol->name);
+ goto cleanup;
+ }
+
if (vol->building) {
virReportError(VIR_ERR_OPERATION_INVALID,
_("volume '%s' is still being allocated."),
if (virStorageVolResizeEnsureACL(obj->conn, pool->def, vol) < 0)
goto cleanup;
+ if (vol->in_use) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("volume '%s' is still in use."),
+ vol->name);
+ goto cleanup;
+ }
+
if (vol->building) {
virReportError(VIR_ERR_OPERATION_INVALID,
_("volume '%s' is still being allocated."),
if (virStorageVolWipePatternEnsureACL(obj->conn, pool->def, vol) < 0)
goto cleanup;
+ if (vol->in_use) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("volume '%s' is still in use."),
+ vol->name);
+ goto cleanup;
+ }
+
if (vol->building) {
virReportError(VIR_ERR_OPERATION_INVALID,
_("volume '%s' is still being allocated."),