diff options
author | Nithin Raju <nithin@vmware.com> | 2014-11-18 17:42:42 -0800 |
---|---|---|
committer | Gurucharan Shetty <gshetty@nicira.com> | 2014-11-20 07:10:28 -0800 |
commit | 2ba811323416042edac6792845bdd35256fc53c7 (patch) | |
tree | d6eb062fcb3fcff3c6cc2697d543ca90e84841b9 /datapath-windows/ovsext/Vport.c | |
parent | f6861bef4f763480b4e6e02935990b971c2c39bc (diff) | |
download | openvswitch-2ba811323416042edac6792845bdd35256fc53c7.tar.gz |
datapath-windows: fixes in OvsGetExtInfoIoctl()
A few fixes around locking.
Signed-off-by: Nithin Raju <nithin@vmware.com>
Acked-by: Ankur Sharma <ankursharma@vmware.com>
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/Vport.c')
-rw-r--r-- | datapath-windows/ovsext/Vport.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index 2dc5f0a4d..33aa95e1e 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -1235,7 +1235,14 @@ OvsConvertIfCountedStrToAnsiStr(PIF_COUNTED_STRING wStr, return STATUS_SUCCESS; } - +/* + * -------------------------------------------------------------------------- + * Utility function that populates a 'OVS_VPORT_EXT_INFO' structure for the + * specified vport. + * + * Assumes that 'gOvsCtrlLock' is held. + * -------------------------------------------------------------------------- + */ NTSTATUS OvsGetExtInfoIoctl(POVS_VPORT_GET vportGet, POVS_VPORT_EXT_INFO extInfo) @@ -1247,11 +1254,17 @@ OvsGetExtInfoIoctl(POVS_VPORT_GET vportGet, BOOLEAN doConvert = FALSE; RtlZeroMemory(extInfo, sizeof (POVS_VPORT_EXT_INFO)); + ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, NDIS_RWL_AT_DISPATCH_LEVEL); if (vportGet->portNo == 0) { StringCbLengthA(vportGet->name, OVS_MAX_PORT_NAME_LENGTH - 1, &len); vport = OvsFindVportByHvName(gOvsSwitchContext, vportGet->name); + if (vport != NULL) { + /* If the port is not a Hyper-V port and it has been added earlier, + * we'll find it in 'ovsPortNameHashArray'. */ + vport = OvsFindVportByOvsName(gOvsSwitchContext, vportGet->name); + } } else { vport = OvsFindVportByPortNo(gOvsSwitchContext, vportGet->portNo); } @@ -1299,7 +1312,6 @@ OvsGetExtInfoIoctl(POVS_VPORT_GET vportGet, extInfo->vifUUID[0] = 0; } NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState); - NdisReleaseSpinLock(gOvsCtrlLock); if (doConvert) { status = OvsConvertIfCountedStrToAnsiStr(&vport->portFriendlyName, extInfo->name, |