提交 097c9b52 编写于 作者: E Eric Blake

maint: improve VIR_ERR_INVALID_STORAGE_VOL usage

For storage volume validation, we weren't consistent on
whether to use VIR_FROM_NONE or VIR_FROM_STORAGE.  Similar
to previous patches, use a common macro to make it nicer.
Furthermore, just as in commit 6e130ddc, the difference
between VIR_IS_STORAGE_VOL and VIR_IS_CONNECTED_STORAGE_VOL
is moot (due to reference counting, any valid volume must
be tied to a valid connection).

virStorageVolCreateXMLFrom allows cross-connection cloning,
where the error is reported against the connection of the
destination pool.

* src/datatypes.h (virCheckStorageVolReturn)
(virCheckStorageVolGoto): New macros.
(VIR_IS_STORAGE_VOL, VIR_IS_CONNECTED_STORAGE_VOL): Drop
unused macros.
* src/libvirt.c: Use macro throughout.
(virLibStorageVolError): Drop unused macro.
Signed-off-by: NEric Blake <eblake@redhat.com>
上级 1b9f5aa7
...@@ -138,10 +138,31 @@ extern virClassPtr virStoragePoolClass; ...@@ -138,10 +138,31 @@ extern virClassPtr virStoragePoolClass;
} \ } \
} while (0) } while (0)
# define VIR_IS_STORAGE_VOL(obj) \ # define virCheckStorageVolReturn(obj, retval) \
(virObjectIsClass((obj), virStorageVolClass)) do { \
# define VIR_IS_CONNECTED_STORAGE_VOL(obj) \ virStorageVolPtr _vol = (obj); \
(VIR_IS_STORAGE_VOL(obj) && virObjectIsClass((obj)->conn, virConnectClass)) if (!virObjectIsClass(_vol, virStorageVolClass) || \
!virObjectIsClass(_vol->conn, virConnectClass)) { \
virReportErrorHelper(VIR_FROM_STORAGE, \
VIR_ERR_INVALID_STORAGE_VOL, \
__FILE__, __FUNCTION__, __LINE__, \
__FUNCTION__); \
virDispatchError(NULL); \
return retval; \
} \
} while (0)
# define virCheckStorageVolGoto(obj, label) \
do { \
virStorageVolPtr _vol = (obj); \
if (!virObjectIsClass(_vol, virStorageVolClass) || \
!virObjectIsClass(_vol->conn, virConnectClass)) { \
virReportErrorHelper(VIR_FROM_STORAGE, \
VIR_ERR_INVALID_STORAGE_VOL, \
__FILE__, __FUNCTION__, __LINE__, \
__FUNCTION__); \
goto label; \
} \
} while (0)
# define VIR_IS_NODE_DEVICE(obj) \ # define VIR_IS_NODE_DEVICE(obj) \
(virObjectIsClass((obj), virNodeDeviceClass)) (virObjectIsClass((obj), virNodeDeviceClass))
......
...@@ -528,9 +528,6 @@ DllMain(HINSTANCE instance ATTRIBUTE_UNUSED, ...@@ -528,9 +528,6 @@ DllMain(HINSTANCE instance ATTRIBUTE_UNUSED,
#define virLibDomainError(code, ...) \ #define virLibDomainError(code, ...) \
virReportErrorHelper(VIR_FROM_DOM, code, __FILE__, \ virReportErrorHelper(VIR_FROM_DOM, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__) __FUNCTION__, __LINE__, __VA_ARGS__)
#define virLibStorageVolError(code, ...) \
virReportErrorHelper(VIR_FROM_STORAGE, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__)
#define virLibNodeDeviceError(code, ...) \ #define virLibNodeDeviceError(code, ...) \
virReportErrorHelper(VIR_FROM_NODEDEV, code, __FILE__, \ virReportErrorHelper(VIR_FROM_NODEDEV, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__) __FUNCTION__, __LINE__, __VA_ARGS__)
...@@ -12602,11 +12599,7 @@ virStoragePoolLookupByVolume(virStorageVolPtr vol) ...@@ -12602,11 +12599,7 @@ virStoragePoolLookupByVolume(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, NULL);
virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
if (vol->conn->storageDriver && vol->conn->storageDriver->storagePoolLookupByVolume) { if (vol->conn->storageDriver && vol->conn->storageDriver->storagePoolLookupByVolume) {
virStoragePoolPtr ret; virStoragePoolPtr ret;
...@@ -13383,11 +13376,8 @@ virStorageVolGetConnect(virStorageVolPtr vol) ...@@ -13383,11 +13376,8 @@ virStorageVolGetConnect(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, NULL);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
return vol->conn; return vol->conn;
} }
...@@ -13519,11 +13509,8 @@ virStorageVolGetName(virStorageVolPtr vol) ...@@ -13519,11 +13509,8 @@ virStorageVolGetName(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, NULL);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
return vol->name; return vol->name;
} }
...@@ -13545,11 +13532,8 @@ virStorageVolGetKey(virStorageVolPtr vol) ...@@ -13545,11 +13532,8 @@ virStorageVolGetKey(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, NULL);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
return vol->key; return vol->key;
} }
...@@ -13631,12 +13615,7 @@ virStorageVolCreateXMLFrom(virStoragePoolPtr pool, ...@@ -13631,12 +13615,7 @@ virStorageVolCreateXMLFrom(virStoragePoolPtr pool,
virResetLastError(); virResetLastError();
virCheckStoragePoolReturn(pool, NULL); virCheckStoragePoolReturn(pool, NULL);
virCheckStorageVolGoto(clonevol, error);
if (!VIR_IS_STORAGE_VOL(clonevol)) {
virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
goto error;
}
virCheckNonNullArgGoto(xmlDesc, error); virCheckNonNullArgGoto(xmlDesc, error);
virCheckReadOnlyGoto(pool->conn->flags | clonevol->conn->flags, error); virCheckReadOnlyGoto(pool->conn->flags | clonevol->conn->flags, error);
...@@ -13690,10 +13669,7 @@ virStorageVolDownload(virStorageVolPtr vol, ...@@ -13690,10 +13669,7 @@ virStorageVolDownload(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
return -1;
}
if (!VIR_IS_STREAM(stream)) { if (!VIR_IS_STREAM(stream)) {
virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__); virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
...@@ -13757,10 +13733,7 @@ virStorageVolUpload(virStorageVolPtr vol, ...@@ -13757,10 +13733,7 @@ virStorageVolUpload(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
return -1;
}
if (!VIR_IS_STREAM(stream)) { if (!VIR_IS_STREAM(stream)) {
virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__); virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
...@@ -13808,13 +13781,9 @@ virStorageVolDelete(virStorageVolPtr vol, ...@@ -13808,13 +13781,9 @@ virStorageVolDelete(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = vol->conn; conn = vol->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
if (conn->storageDriver && conn->storageDriver->storageVolDelete) { if (conn->storageDriver && conn->storageDriver->storageVolDelete) {
...@@ -13851,13 +13820,9 @@ virStorageVolWipe(virStorageVolPtr vol, ...@@ -13851,13 +13820,9 @@ virStorageVolWipe(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = vol->conn; conn = vol->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
if (conn->storageDriver && conn->storageDriver->storageVolWipe) { if (conn->storageDriver && conn->storageDriver->storageVolWipe) {
...@@ -13898,13 +13863,9 @@ virStorageVolWipePattern(virStorageVolPtr vol, ...@@ -13898,13 +13863,9 @@ virStorageVolWipePattern(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = vol->conn; conn = vol->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
if (conn->storageDriver && conn->storageDriver->storageVolWipePattern) { if (conn->storageDriver && conn->storageDriver->storageVolWipePattern) {
...@@ -13940,11 +13901,8 @@ virStorageVolFree(virStorageVolPtr vol) ...@@ -13940,11 +13901,8 @@ virStorageVolFree(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virObjectUnref(vol); virObjectUnref(vol);
return 0; return 0;
} }
...@@ -13974,11 +13932,8 @@ virStorageVolRef(virStorageVolPtr vol) ...@@ -13974,11 +13932,8 @@ virStorageVolRef(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if ((!VIR_IS_CONNECTED_STORAGE_VOL(vol))) { virCheckStorageVolReturn(vol, -1);
virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virObjectRef(vol); virObjectRef(vol);
return 0; return 0;
} }
...@@ -14003,11 +13958,7 @@ virStorageVolGetInfo(virStorageVolPtr vol, ...@@ -14003,11 +13958,7 @@ virStorageVolGetInfo(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
virCheckNonNullArgGoto(info, error); virCheckNonNullArgGoto(info, error);
memset(info, 0, sizeof(virStorageVolInfo)); memset(info, 0, sizeof(virStorageVolInfo));
...@@ -14049,12 +14000,7 @@ virStorageVolGetXMLDesc(virStorageVolPtr vol, ...@@ -14049,12 +14000,7 @@ virStorageVolGetXMLDesc(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, NULL);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
conn = vol->conn; conn = vol->conn;
if (conn->storageDriver && conn->storageDriver->storageVolGetXMLDesc) { if (conn->storageDriver && conn->storageDriver->storageVolGetXMLDesc) {
...@@ -14094,12 +14040,7 @@ virStorageVolGetPath(virStorageVolPtr vol) ...@@ -14094,12 +14040,7 @@ virStorageVolGetPath(virStorageVolPtr vol)
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, NULL);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return NULL;
}
conn = vol->conn; conn = vol->conn;
if (conn->storageDriver && conn->storageDriver->storageVolGetPath) { if (conn->storageDriver && conn->storageDriver->storageVolGetPath) {
...@@ -14162,12 +14103,7 @@ virStorageVolResize(virStorageVolPtr vol, ...@@ -14162,12 +14103,7 @@ virStorageVolResize(virStorageVolPtr vol,
virResetLastError(); virResetLastError();
if (!VIR_IS_STORAGE_VOL(vol)) { virCheckStorageVolReturn(vol, -1);
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
virDispatchError(NULL);
return -1;
}
conn = vol->conn; conn = vol->conn;
virCheckReadOnlyGoto(conn->flags, error); virCheckReadOnlyGoto(conn->flags, error);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册