[ovs-dev] [PATCH 1/7] datapath-windows: fixes in OvsGetExtInfoIoctl()

Eitan Eliahu eliahue at vmware.com
Wed Nov 12 17:48:12 UTC 2014


I don't see a reason why this function need to be called with gOvsCtrlLock held. The contention is on the Hyper-V VSwitch port when a port could be removed from a different thread context. But, this is taken care of by dispatch lock.
Thanks,
Eitan

-----Original Message-----
From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Nithin Raju
Sent: Tuesday, November 11, 2014 7:05 PM
To: dev at openvswitch.org
Subject: [ovs-dev] [PATCH 1/7] datapath-windows: fixes in OvsGetExtInfoIoctl()

A few fixes around locking.

Signed-off-by: Nithin Raju <nithin at vmware.com>
---
 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 a46d49f..ff105b7 100644
--- a/datapath-windows/ovsext/Vport.c
+++ b/datapath-windows/ovsext/Vport.c
@@ -1178,7 +1178,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) @@ -1190,11 +1197,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);
     }
@@ -1242,7 +1255,6 @@ OvsGetExtInfoIoctl(POVS_VPORT_GET vportGet,
         extInfo->vifUUID[0] = 0;
     }
     NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState);
-    NdisReleaseSpinLock(gOvsCtrlLock);
     if (doConvert) {
         status = OvsConvertIfCountedStrToAnsiStr(&vport->portFriendlyName,
                                                  extInfo->name,
--
1.7.4.1

_______________________________________________
dev mailing list
dev at openvswitch.org
https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailman_listinfo_dev&d=AAIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=CWsgHUxi6ExLXY798tmo3LJ4e3geGYp56lkcH-5cLCY&m=kljXfipMWChN4wcit2FSYnrKCIVYC0ZYkkDcmyWkNSc&s=E9eEWBTjsxTiFAKz_aVhhrQ0tqiis6z37SlwU7HpGuM&e= 


More information about the dev mailing list