virStorageVolDefPtr vol,
unsigned long long capacity,
unsigned int flags);
+
+/* Upon entering this callback passed @obj is unlocked. However,
+ * the pool's asyncjobs counter has been incremented and volume's
+ * in_use has been adjusted to ensure singular usage. */
typedef int (*virStorageBackendVolumeDownload)(virStoragePoolObjPtr obj,
virStorageVolDefPtr vol,
virStreamPtr stream,
unsigned long long offset,
unsigned long long length,
unsigned int flags);
+
+/* Upon entering this callback passed @obj is unlocked. However,
+ * the pool's asyncjobs counter has been incremented and volume's
+ * in_use has been adjusted to ensure singular usage. */
typedef int (*virStorageBackendVolumeUpload)(virStoragePoolObjPtr obj,
virStorageVolDefPtr vol,
virStreamPtr stream,
unsigned long long offset,
unsigned long long len,
unsigned int flags);
+
+/* Upon entering this callback passed @obj is unlocked. However,
+ * the pool's asyncjobs counter has been incremented and volume's
+ * in_use has been adjusted to ensure singular usage. */
typedef int (*virStorageBackendVolumeWipe)(virStoragePoolObjPtr pool,
virStorageVolDefPtr vol,
unsigned int algorithm,
virCheckFlags(0, -1);
- if (!(iscsi = virStorageBackendISCSIDirectSetConnection(pool, NULL)))
+ virObjectLock(pool);
+ iscsi = virStorageBackendISCSIDirectSetConnection(pool, NULL);
+ virObjectUnlock(pool);
+
+ if (!iscsi)
return -1;
switch ((virStorageVolWipeAlgorithm) algorithm) {
unsigned int flags)
{
virStorageBackendRBDStatePtr ptr = NULL;
- virStoragePoolDefPtr def = virStoragePoolObjGetDef(pool);
+ virStoragePoolDefPtr def;
rbd_image_t image = NULL;
rbd_image_info_t info;
uint64_t stripe_count;
virCheckFlags(0, -1);
+ virObjectLock(pool);
+ def = virStoragePoolObjGetDef(pool);
VIR_DEBUG("Wiping RBD image %s/%s", def->source.name, vol->name);
+ ptr = virStorageBackendRBDNewState(pool);
+ virObjectUnlock(pool);
- if (!(ptr = virStorageBackendRBDNewState(pool)))
+ if (!ptr)
goto cleanup;
if ((r = rbd_open(ptr->ioctx, vol->name, &image, NULL)) < 0) {
virStoragePoolObjIncrAsyncjobs(obj);
voldef->in_use++;
+ virObjectUnlock(obj);
ret = backend->downloadVol(obj, voldef, stream, offset, length, flags);
+ virObjectLock(obj);
voldef->in_use--;
virStoragePoolObjDecrAsyncjobs(obj);
virStoragePoolObjIncrAsyncjobs(obj);
voldef->in_use++;
+ virObjectUnlock(obj);
rc = backend->uploadVol(obj, voldef, stream, offset, length, flags);
+ virObjectLock(obj);
voldef->in_use--;
virStoragePoolObjDecrAsyncjobs(obj);
virStoragePoolObjIncrAsyncjobs(obj);
voldef->in_use++;
+ virObjectUnlock(obj);
rc = backend->wipeVol(obj, voldef, algorithm, flags);
+ virObjectLock(obj);
voldef->in_use--;
virStoragePoolObjDecrAsyncjobs(obj);