mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
nodedev: Fabric name must not be required for fc_host capability
fabric_name is one of many fc_host attributes in Linux that is optional and left to the low-level driver to decide if it is implemented. The zfcp device driver does not provide a fabric name for an fcp host. This patch removes the requirement for a fabric name by making it optional. Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
This commit is contained in:
parent
d59226926e
commit
666bee3973
@ -254,7 +254,7 @@
|
||||
number of vport in use. <code>max_vports</code> shows the
|
||||
maximum vports the HBA supports. "fc_host" implies following
|
||||
sub-elements: <code>wwnn</code>, <code>wwpn</code>, and
|
||||
<code>fabric_wwn</code>.
|
||||
optionally <code>fabric_wwn</code>.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
@ -18,7 +18,18 @@
|
||||
<change/>
|
||||
</section>
|
||||
<section title="Bug fixes">
|
||||
<change/>
|
||||
<change>
|
||||
<summary>
|
||||
nodedev: Fabric name must not be required for fc_host capability
|
||||
</summary>
|
||||
<description>
|
||||
fabric_name is one of many fc_host attributes in Linux that is
|
||||
optional and left to the low-level driver to decide if it is
|
||||
implemented. For example the zfcp device driver does not provide a
|
||||
fabric name for an fcp host. The requirement for the existence of
|
||||
a fabric name has been removed by making it optional.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
</release>
|
||||
<release version="v3.0.0" date="2017-01-17">
|
||||
|
@ -367,9 +367,11 @@
|
||||
<ref name='wwn'/>
|
||||
</element>
|
||||
|
||||
<element name='fabric_wwn'>
|
||||
<ref name='wwn'/>
|
||||
</element>
|
||||
<optional>
|
||||
<element name='fabric_wwn'>
|
||||
<ref name='wwn'/>
|
||||
</element>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='capsvports'>
|
||||
|
@ -72,13 +72,10 @@ nodeDeviceSysfsGetSCSIHostCaps(virNodeDevCapDataPtr d)
|
||||
VIR_FREE(d->scsi_host.wwnn);
|
||||
VIR_STEAL_PTR(d->scsi_host.wwnn, tmp);
|
||||
|
||||
if (!(tmp = virReadFCHost(NULL, d->scsi_host.host, "fabric_name"))) {
|
||||
VIR_WARN("Failed to read fabric WWN for host%d",
|
||||
d->scsi_host.host);
|
||||
goto cleanup;
|
||||
if ((tmp = virReadFCHost(NULL, d->scsi_host.host, "fabric_name"))) {
|
||||
VIR_FREE(d->scsi_host.fabric_wwn);
|
||||
VIR_STEAL_PTR(d->scsi_host.fabric_wwn, tmp);
|
||||
}
|
||||
VIR_FREE(d->scsi_host.fabric_wwn);
|
||||
VIR_STEAL_PTR(d->scsi_host.fabric_wwn, tmp);
|
||||
}
|
||||
|
||||
if (virIsCapableVport(NULL, d->scsi_host.host)) {
|
||||
|
1
tests/fchostdata/fc_host/host6/node_name
Normal file
1
tests/fchostdata/fc_host/host6/node_name
Normal file
@ -0,0 +1 @@
|
||||
0x2002001b32a9da4e
|
1
tests/fchostdata/fc_host/host6/port_name
Normal file
1
tests/fchostdata/fc_host/host6/port_name
Normal file
@ -0,0 +1 @@
|
||||
0x2102001b32a9da4e
|
1
tests/fchostdata/fc_host/host6/port_state
Normal file
1
tests/fchostdata/fc_host/host6/port_state
Normal file
@ -0,0 +1 @@
|
||||
Online
|
@ -29,13 +29,16 @@ static char *fchost_prefix;
|
||||
|
||||
#define TEST_FC_HOST_PREFIX fchost_prefix
|
||||
#define TEST_FC_HOST_NUM 5
|
||||
#define TEST_FC_HOST_NUM_NO_FAB 6
|
||||
|
||||
/* Test virIsCapableFCHost */
|
||||
static int
|
||||
test1(const void *data ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (virIsCapableFCHost(TEST_FC_HOST_PREFIX,
|
||||
TEST_FC_HOST_NUM))
|
||||
TEST_FC_HOST_NUM) &&
|
||||
virIsCapableFCHost(TEST_FC_HOST_PREFIX,
|
||||
TEST_FC_HOST_NUM_NO_FAB))
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
@ -148,6 +151,39 @@ test5(const void *data ATTRIBUTE_UNUSED)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Test virReadFCHost fabric name optional */
|
||||
static int
|
||||
test6(const void *data ATTRIBUTE_UNUSED)
|
||||
{
|
||||
const char *expect_wwnn = "2002001b32a9da4e";
|
||||
const char *expect_wwpn = "2102001b32a9da4e";
|
||||
char *wwnn = NULL;
|
||||
char *wwpn = NULL;
|
||||
int ret = -1;
|
||||
|
||||
if (!(wwnn = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM_NO_FAB,
|
||||
"node_name")))
|
||||
return -1;
|
||||
|
||||
if (!(wwpn = virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM_NO_FAB,
|
||||
"port_name")))
|
||||
goto cleanup;
|
||||
|
||||
if (virReadFCHost(TEST_FC_HOST_PREFIX, TEST_FC_HOST_NUM_NO_FAB,
|
||||
"fabric_name"))
|
||||
goto cleanup;
|
||||
|
||||
if (STRNEQ(expect_wwnn, wwnn) ||
|
||||
STRNEQ(expect_wwpn, wwpn))
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
VIR_FREE(wwnn);
|
||||
VIR_FREE(wwpn);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
mymain(void)
|
||||
{
|
||||
@ -169,6 +205,8 @@ mymain(void)
|
||||
ret = -1;
|
||||
if (virTestRun("test5", test5, NULL) < 0)
|
||||
ret = -1;
|
||||
if (virTestRun("test6", test6, NULL) < 0)
|
||||
ret = -1;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(fchost_prefix);
|
||||
|
Loading…
Reference in New Issue
Block a user