[libvirt] [PATCH] storage: Allow multiple hosts for a storage pool
Daniel P. Berrange
berrange at redhat.com
Thu Apr 19 13:33:18 UTC 2012
On Thu, Apr 19, 2012 at 02:33:27PM +0200, Wido den Hollander wrote:
> The current storage pools for NFS and iSCSI only require one host to
> connect to. Future storage pools like RBD and Sheepdog will require
> multiple hosts.
>
> This patch allows multiple source hosts and rewrites the current
> storage drivers.
>
> Signed-off-by: Wido den Hollander <wido at widodh.nl>
> ---
> src/conf/storage_conf.c | 59 ++++++++++++++++++++++++----------
> src/conf/storage_conf.h | 5 ++-
> src/esx/esx_storage_driver.c | 6 +++-
> src/storage/storage_backend_fs.c | 12 +++---
> src/storage/storage_backend_iscsi.c | 12 +++---
> src/test/test_driver.c | 4 +-
> 6 files changed, 63 insertions(+), 35 deletions(-)
>
> @@ -1677,7 +1700,7 @@ int virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
> break;
> case VIR_STORAGE_POOL_NETFS:
> if ((STREQ(pool->def->source.dir, def->source.dir)) \
> - && (STREQ(pool->def->source.host.name, def->source.host.name)))
> + && (STREQ(pool->def->source.hosts[0].name, def->source.hosts[0].name)))
> matchpool = pool;
> break;
> case VIR_STORAGE_POOL_SCSI:
Here we need to add to the conditional check "nhosts == 1" before dereferencing hosts[0].
> @@ -1688,7 +1711,7 @@ int virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
> {
> matchpool = virStoragePoolSourceFindDuplicateDevices(pool, def);
> if (matchpool) {
> - if (STREQ(matchpool->def->source.host.name, def->source.host.name)) {
> + if (STREQ(matchpool->def->source.hosts[0].name, def->source.hosts[0].name)) {
> if ((matchpool->def->source.initiator.iqn) && (def->source.initiator.iqn)) {
> if (STREQ(matchpool->def->source.initiator.iqn, def->source.initiator.iqn))
> break;
Same here.
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 1af12e6..79eefd3 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -206,7 +206,7 @@ virStorageBackendFileSystemNetFindPoolSourcesFunc(virStoragePoolObjPtr pool ATTR
> if (!(src = virStoragePoolSourceListNewSource(&state->list)))
> goto cleanup;
At the start of this function we need to have
if (src->nhosts != 1) {
virStorageReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s"
"Expected exactly 1 host for the filesystem pool"));
goto cleanup;
}
And similarly at the start of other functions which are referencing
src->hosts[0]
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list