On Fri, Apr 08, 2016 at 03:12:59AM +0000, Daniele Di Proietto wrote:
> 
> 
> On 01/04/2016 09:52, "Jarno Rajahalme" <ja...@ovn.org> wrote:
> 
> >
> >> On Mar 30, 2016, at 8:08 PM, Daniele Di Proietto
> >><diproiet...@vmware.com> wrote:
> >> 
> >> 
> >> On 30/03/2016 16:01, "Ben Pfaff" <b...@ovn.org> wrote:
> >> 
> >>> (I'm taking a look at this patch specifically because Daniele asked me;
> >>> I'm not planning to review the whole series.)
> >>> 
> >>> On Mon, Mar 28, 2016 at 12:41:40PM -0700, Daniele Di Proietto wrote:
> >>>> The dpif-netdev datapath keeps ports in a cmap which is written only
> >>>>by
> >>>> the main thread (holding port_mutex), but which is read concurrently
> >>>>by
> >>>> many threads (most notably the pmd threads).
> >>>> 
> >>>> When removing ports from the datapath we should postpone the deletion,
> >>>> otherwise another thread might access invalid memory while reading the
> >>>> cmap.
> >>>> 
> >>>> This commit splits do_port_del() in do_port_remove() and
> >>>> do_port_destroy(): the former removes the port from the cmap, while
> >>>>the
> >>>> latter reclaims the memory and drops the reference to the underlying
> >>>> netdev.
> >>> 
> >>> s/del_port/port_del/ here:
> >> 
> >> Thanks, changed
> >> 
> >>> 
> >>>> dpif_netdev_del_port() now uses ovsrcu_synchronize() before calling
> >>>> do_port_destroy(), to avoid memory corruption in concurrent readers.
> >>> 
> >>> ovsrcu_synchronize() requires that nothing in the thread that calls it
> >>> is relying on RCU to keep objects around.  That means that no caller of
> >>> dfpi_port_del()--there are a few of them--can rely on it.  This is
> >>> usually a risky assumption, especially because this assumption can
> >>> change later.  Is there reason to believe that it isn't important in
> >>>all
> >>> of these cases?
> >> 
> >> I agree that's risky, but I think it's the only way to keep the ports
> >>RCU
> >> protected, because a port needs to be effectively deleted before
> >> dpif_netdev_port_del() can return.
> >> 
> >
> >If this is because otherwise a following port_add can fail, as the old
> >port is still around, maybe we could make the highest possible level of
> >port_add detect the failure and then rcu_synchronize and try again? Would
> >that work?
> >
> >  Jarno
> 
> After some thought I decided to avoid using RCU for ports. I'll send an
> updated
> series soon.

Well, that makes the discussion a little easier ;-)  Thanks.

Do you want to me to review anything in the new version?
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to