
On 02/03/2014 09:54 AM, Peter Krempa wrote:
Implement the APIs added by the previous patch in the default storage driver used by qemu. --- src/check-aclrules.pl | 1 + src/storage/storage_backend.c | 37 ++++++++++++++++++ src/storage/storage_backend.h | 43 +++++++++++++++++++++ src/storage/storage_driver.c | 89 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 170 insertions(+)
+static int +storageFileInit(virStorageFilePtr file) +{ + virStorageFileBackendPrivPtr priv = NULL; + + if (VIR_ALLOC(priv) < 0) + return -1; + + file->priv = priv; + + if (!(priv->backend = virStorageFileBackendForType(file->type, + file->protocol))) + goto error; + + if (priv->backend->backendInit) { + if (priv->backend->backendInit(file) < 0) + goto error; + } + + return 0;
So if there's no backendInit callback function, we just succeed? Shouldn't that error out? Or is backendInit just optional, and the important thing is wheterh priv->backend was successfully looked up.
+static int +storageFileUnlink(virStorageFilePtr file) +{ + virStorageFileBackendPrivPtr priv = file->priv; + + if (!priv->backend->storageFileUnlink) + return ENOSYS;
Returning a positive errno value? Don't you want a negative here? Any documentation on the fact that these functions are returning errno values instead of -1, and with errno itself left indeterminate? Or maybe make this 'errno = ENOSYS; return -1;'?
+ + return priv->backend->storageFileUnlink(file); +} + + +static int +storageFileStat(virStorageFilePtr file, + struct stat *st) +{ + virStorageFileBackendPrivPtr priv = file->priv; + + if (!(priv->backend->storageFileStat)) + return ENOSYS;
Same issue about failure returns.
+ + return priv->backend->storageFileStat(file, st); +} + + static virStorageDriver storageDriver = { .name = "storage", .storageOpen = storageOpen, /* 0.4.0 */ @@ -2631,6 +2711,15 @@ static virStorageDriver storageDriver = {
.storagePoolIsActive = storagePoolIsActive, /* 0.7.3 */ .storagePoolIsPersistent = storagePoolIsPersistent, /* 0.7.3 */ + + /* ----- internal APIs ----- */ + .storageFileInit = storageFileInit, + .storageFileDeinit = storageFileDeinit, + + .storageFileUnlink = storageFileUnlink, + .storageFileStat = storageFileStat, + .storageFileCreate = storageFileCreate, + };
I can see where you're going with this, but am not quite sure it is ready to merge without addressing my comments above. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org