Re: [ovs-dev] [PATCH v3] dpif: Return ENODEV from dpif_port_query_by_*() if there's no port.
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
Re: [ovs-dev] [PATCH v3] dpif: Return ENODEV from dpif_port_query_by_*() if there's no port.
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