From 2340f0196f6339f95274f73699d54e0b5e07c362 Mon Sep 17 00:00:00 2001 From: Osier Yang Date: Mon, 6 Jan 2014 18:19:34 +0800 Subject: [PATCH] storage: Fix autostart of pool with "fc_host" type adapter The "checkPool" is a bit different for pool with "fc_host" type source adapter, since the vHBA it's based on might be not created yet (it's created by "startPool", which is involked after "checkPool" in storageDriverAutostart). So it should not fail, otherwise the "autostart" of the pool will fail either. The problem is easy to reproduce: * Enable "autostart" for the pool * Restart libvirtd service * Check the pool's state --- src/storage/storage_backend_scsi.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c index 08e13313ac..fce2bae481 100644 --- a/src/storage/storage_backend_scsi.c +++ b/src/storage/storage_backend_scsi.c @@ -707,8 +707,19 @@ virStorageBackendSCSICheckPool(virConnectPtr conn ATTRIBUTE_UNUSED, *isActive = false; - if (!(name = getAdapterName(pool->def->source.adapter))) - return -1; + if (!(name = getAdapterName(pool->def->source.adapter))) { + /* It's normal for the pool with "fc_host" type source + * adapter fails to get the adapter name, since the vHBA + * the adapter based on might be not created yet. + */ + if (pool->def->source.adapter.type == + VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST) { + virResetLastError(); + return 0; + } else { + return -1; + } + } if (getHostNumber(name, &host) < 0) goto cleanup;