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
