diff options
author | Sorin Vinturis <svinturis@cloudbasesolutions.com> | 2015-07-02 11:39:14 +0000 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2015-07-06 08:25:42 -0700 |
commit | 7552cf4bcadefc4dbb907d293936d307c552ea2d (patch) | |
tree | 6d1a888b0558a8b365afb3a56d50e7e82ec768ad /datapath-windows | |
parent | adfb6580f0bde8ce455ce3311a56697177852d2b (diff) | |
download | openvswitch-7552cf4bcadefc4dbb907d293936d307c552ea2d.tar.gz |
datapath-windows: Solved BSOD when adding OVS ports
This BSOD occurred in the context of a packet (NBL) with multiple
NET_BUFFER(s) (NBs). The reason for the BSOD is due to the marking
of NBLs created by OVS as being external and wrongly completing them.
Signed-off-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Reported-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/82
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows')
-rw-r--r-- | datapath-windows/ovsext/BufferMgmt.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/datapath-windows/ovsext/BufferMgmt.c b/datapath-windows/ovsext/BufferMgmt.c index 83d6cdee3..3550e20cc 100644 --- a/datapath-windows/ovsext/BufferMgmt.c +++ b/datapath-windows/ovsext/BufferMgmt.c @@ -560,7 +560,8 @@ OvsInitExternalNBLContext(PVOID ovsContext, poolHandle = NdisGetPoolFromNetBufferList(nbl); - if (poolHandle == context->ovsPool.ndisHandle) { + if (poolHandle == context->ovsPool.ndisHandle || + nbl->SourceHandle == context->ovsPool.ndisHandle) { return (POVS_BUFFER_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(nbl); } status = NdisAllocateNetBufferListContext(nbl, sizeof (OVS_BUFFER_CONTEXT), @@ -801,6 +802,7 @@ OvsPartialCopyNBL(PVOID ovsContext, OVS_DEFAULT_PORT_NO); InterlockedIncrement((LONG volatile *)&srcCtx->refCount); + #ifdef DBG OvsDumpNetBufferList(nbl); OvsDumpForwardingDetails(nbl); @@ -808,6 +810,7 @@ OvsPartialCopyNBL(PVOID ovsContext, OvsDumpNetBufferList(newNbl); OvsDumpForwardingDetails(newNbl); #endif + OVS_LOG_LOUD("Partial Copy new NBL: %p", newNbl); return newNbl; |