Nithin,
Just assert on IRQL==DISPATCH_LEVEL in the beginning of OvsGetExtInfoIoctl() 
and we are ready to go.
Thanks,
Eitan

LG otherwise.
Acked-by: Eitan Eliahu <[email protected]>

-----Original Message-----
From: dev [mailto:[email protected]] On Behalf Of Nithin Raju
Sent: Thursday, October 30, 2014 1:15 PM
To: [email protected]
Subject: [ovs-dev] [PATCH 2/3 v2] datapath-windws: fix locking code in 
OvsGetNetdevCmdHandler()

We were acquiring locks twice, and forgotten to release a lock in an error case.

Signed-off-by: Nithin Raju <[email protected]>
---
 datapath-windows/ovsext/Vport.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c 
index b28336b..430ae77 100644
--- a/datapath-windows/ovsext/Vport.c
+++ b/datapath-windows/ovsext/Vport.c
@@ -1179,6 +1179,14 @@ OvsConvertIfCountedStrToAnsiStr(PIF_COUNTED_STRING wStr, 
 }
 
 
+/*
+ * 
+-----------------------------------------------------------------------
+---
+ * 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) @@ -1201,7 +1209,6 @@ 
OvsGetExtInfoIoctl(POVS_VPORT_GET vportGet,
     if (vport == NULL || (vport->ovsState != OVS_STATE_CONNECTED &&
                           vport->ovsState != OVS_STATE_NIC_CREATED)) {
         NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState);
-        NdisReleaseSpinLock(gOvsCtrlLock);
         if (vportGet->portNo) {
             OVS_LOG_WARN("vport %u does not exist any more", vportGet->portNo);
         } else {
@@ -1293,7 +1300,6 @@ OvsGetNetdevCmdHandler(POVS_USER_PARAMS_CONTEXT 
usrParamsCtx,
     NL_ERROR nlError = NL_ERROR_SUCCESS;
     OVS_VPORT_GET vportGet;
     OVS_VPORT_EXT_INFO info;
-    LOCK_STATE_EX lockState;
 
     static const NL_POLICY ovsNetdevPolicy[] = {
         [OVS_WIN_NETDEV_ATTR_NAME] = { .type = NL_A_STRING, @@ -1327,15 
+1333,12 @@ OvsGetNetdevCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
     RtlCopyMemory(&vportGet.name, NlAttrGet(netdevAttrs[OVS_VPORT_ATTR_NAME]),
                   NlAttrGetSize(netdevAttrs[OVS_VPORT_ATTR_NAME]));
 
-    NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, 0);
     status = OvsGetExtInfoIoctl(&vportGet, &info);
     if (status == STATUS_DEVICE_DOES_NOT_EXIST) {
         nlError = NL_ERROR_NODEV;
-        NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState);
         OvsReleaseCtrlLock();
         goto cleanup;
     }
-    NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState);
 
     status = CreateNetlinkMesgForNetdev(&info, msgIn,
                  usrParamsCtx->outputBuffer, usrParamsCtx->outputLength,
--
1.7.4.1

_______________________________________________
dev mailing list
[email protected]
https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailman_listinfo_dev&d=AAIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=CWsgHUxi6ExLXY798tmo3LJ4e3geGYp56lkcH-5cLCY&m=twKFqmlYd2SOJQf_zHlvKyy9mQRimQaPLoaRPkpPORA&s=U43ULtgwf9TzxxJ9bbBlFT7aDAiaZhGTiEAJZDbOHBY&e=
 
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to