[ovs-dev] [backport branch-2.3] route-table: Make route-table module thread-safe.

Alex Wang alexw at nicira.com
Mon Jul 21 17:43:08 UTC 2014


Thx, backported to branch-2.3 with suggested changes,


On Mon, Jul 21, 2014 at 8:57 AM, Ben Pfaff <blp at nicira.com> wrote:

> On Sun, Jul 20, 2014 at 12:43:41AM -0700, Alex Wang wrote:
> > From: Ryan Wilson <wryan at nicira.com>
> >
> > Since the use of xcache, the netdev struct can be freed by the
> > revalidator threads.  This fact also makes the following race possible:
> >
> > 1. Consider there is a gre tunnel, and datapath flows that go through
> >    the tunnel.  Now, assume user deletes the tunnel port.
> > 2. The main thread closes all of its references to the corresponding
> >    netdev struct.
> > 3. If the ukey for the tunnel datapath flows hold the last reference
> >    to the old port's netdev, the revalidator will then close it
> >    and remove the netlink notifier struct (if the netdev is the last
> >    vport netdev).
> > 4. However, if the main thread executes the netdev_vport_run(), and
> >    sees the existence of netlink notifier struct (before revalidator
> >    frees it), it will try polling updates from the notifier socket.
> >    And when it polls the socket fd, the fd has already been freed,
> >    and poll will keep failing with "Bad file descriptor".
> >
> > This race has already been fixed on master by commit 3c27dbe6 (route
> > -table: Make route-table module thread-safe.).  This commit backports
> > it to branch-2.3.
> >
> > VMware-BZ: #1287360
> >
> > Signed-off-by: Alex Wang <alexw at nicira.com>
>
> This should reproduce Ryan's Signed-off-by from the original commit.
>
> Acked-by: Ben Pfaff <blp at nicira.com>
>



More information about the dev mailing list