[ovs-dev] [PATCH] datapath-windows: Guard vport usage in user.c

Sairam Venugopal vsairam at vmware.com
Wed Feb 27 19:18:23 UTC 2019


Do we need to keep the dispatchLock for reading vport structures? If that's the case, then we will need to fix it in other areas of the code too. It would be better to move the locking inside the relevant vport.c functions instead of taking out global ones.

Thanks,
Sairam

On 2/27/19, 6:10 AM, "ovs-dev-bounces at openvswitch.org on behalf of Alin Gabriel Serdean" <ovs-dev-bounces at openvswitch.org on behalf of aserdean at ovn.org> wrote:

    When using a vport we need to guard its usage with the dispatch lock.
    
    Signed-off-by: Alin Gabriel Serdean <aserdean at ovn.org>
    ---
     datapath-windows/ovsext/User.c | 16 ++++++++--------
     1 file changed, 8 insertions(+), 8 deletions(-)
    
    diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
    index b43d7cc04..ed1fcbea8 100644
    --- a/datapath-windows/ovsext/User.c
    +++ b/datapath-windows/ovsext/User.c
    @@ -452,14 +452,6 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
         }
     
         fwdDetail = NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL(pNbl);
    -    vport = OvsFindVportByPortNo(gOvsSwitchContext, execute->inPort);
    -    if (vport) {
    -        fwdDetail->SourcePortId = vport->portId;
    -        fwdDetail->SourceNicIndex = vport->nicIndex;
    -    } else {
    -        fwdDetail->SourcePortId = NDIS_SWITCH_DEFAULT_PORT_ID;
    -        fwdDetail->SourceNicIndex = 0;
    -    }
         // XXX: Figure out if any of the other members of fwdDetail need to be set.
     
         status = OvsGetFlowMetadata(&key, execute->keyAttrs);
    @@ -502,6 +494,14 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
     
         if (ndisStatus == NDIS_STATUS_SUCCESS) {
             NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, 0);
    +        vport = OvsFindVportByPortNo(gOvsSwitchContext, execute->inPort);
    +        if (vport) {
    +            fwdDetail->SourcePortId = vport->portId;
    +            fwdDetail->SourceNicIndex = vport->nicIndex;
    +        } else {
    +            fwdDetail->SourcePortId = NDIS_SWITCH_DEFAULT_PORT_ID;
    +            fwdDetail->SourceNicIndex = 0;
    +        }
             ndisStatus = OvsActionsExecute(gOvsSwitchContext, NULL, pNbl,
                                            vport ? vport->portNo :
                                                    OVS_DPPORT_NUMBER_INVALID,
    -- 
    2.16.1.windows.1
    
    _______________________________________________
    dev mailing list
    dev at openvswitch.org
    https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.openvswitch.org%2Fmailman%2Flistinfo%2Fovs-dev&amp;data=02%7C01%7Cvsairam%40vmware.com%7C0bd42693441d43f12bfa08d69cbd589d%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C636868734400091268&amp;sdata=ShTAK8Qyi4hL3EG8PgLzbIxzSMril0w%2BHEE8VO6qWlU%3D&amp;reserved=0
    



More information about the dev mailing list