Re: [ovs-dev] [PATCH v3] dpif: Return ENODEV from dpif_port_query_by_*() if there's no port.

2017-01-06 Thread Daniele Di Proietto





On 06/01/2017 13:01, "Ben Pfaff"  wrote:

>On Fri, Jan 06, 2017 at 12:42:35PM -0800, Daniele Di Proietto wrote:
>> bridge_delete_or_reconfigure() deletes every interface that's not dumped
>> by OFPROTO_PORT_FOR_EACH().  ofproto_dpif.c:port_dump_next(), used by
>> OFPROTO_PORT_FOR_EACH, checks if the ofport is in the datapath by
>> calling port_query_by_name().  If port_query_by_name() returns an error,
>> the dump is interrupted.  If port_query_by_name() returns ENODEV, the
>> device doesn't exist and the dump can continue.
>> 
>> port_query_by_name() for the userspace datapath returns ENOENT instead
>> of ENODEV.  This is expected by dpif_port_query_by_name(), but it's not
>> handled correctly by port_dump_next().
>> 
>> dpif-netdev handles reconfiguration errors for an interface by deleting
>> it from the datapath, so it's possible that a device is missing. When this
>> happens we must make sure that port_dump_next() continues to dump other
>> devices, otherwise they will be deleted and the two layers will have an
>> inconsistent view.
>> 
>> This commit fixes the problem by returning ENODEV from the userspace
>> datapath if the port doesn't exist, and by documenting this clearly in
>> the dpif interfaces.
>> 
>> The problem was found while developing new code.
>> 
>> Signed-off-by: Daniele Di Proietto 
>> ---
>> v3: Return ENODEV instead of ENOENT from dpif-netdev. Document that ENODEV
>> means that the port doesn't exist, other error numbers indicate problems.
>
>Acked-by: Ben Pfaff 

Thanks!  Pushed to master
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v3] dpif: Return ENODEV from dpif_port_query_by_*() if there's no port.

2017-01-06 Thread Ben Pfaff
On Fri, Jan 06, 2017 at 12:42:35PM -0800, Daniele Di Proietto wrote:
> bridge_delete_or_reconfigure() deletes every interface that's not dumped
> by OFPROTO_PORT_FOR_EACH().  ofproto_dpif.c:port_dump_next(), used by
> OFPROTO_PORT_FOR_EACH, checks if the ofport is in the datapath by
> calling port_query_by_name().  If port_query_by_name() returns an error,
> the dump is interrupted.  If port_query_by_name() returns ENODEV, the
> device doesn't exist and the dump can continue.
> 
> port_query_by_name() for the userspace datapath returns ENOENT instead
> of ENODEV.  This is expected by dpif_port_query_by_name(), but it's not
> handled correctly by port_dump_next().
> 
> dpif-netdev handles reconfiguration errors for an interface by deleting
> it from the datapath, so it's possible that a device is missing. When this
> happens we must make sure that port_dump_next() continues to dump other
> devices, otherwise they will be deleted and the two layers will have an
> inconsistent view.
> 
> This commit fixes the problem by returning ENODEV from the userspace
> datapath if the port doesn't exist, and by documenting this clearly in
> the dpif interfaces.
> 
> The problem was found while developing new code.
> 
> Signed-off-by: Daniele Di Proietto 
> ---
> v3: Return ENODEV instead of ENOENT from dpif-netdev. Document that ENODEV
> means that the port doesn't exist, other error numbers indicate problems.

Acked-by: Ben Pfaff 
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev