Re: [PATCH RFC] virtio_net: fix refill related races

From: Rusty Russell
Date: Sun Dec 11 2011 - 22:05:16 EST


On Sun, 11 Dec 2011 16:44:29 +0200, "Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote:
> On Thu, Dec 08, 2011 at 03:07:29PM +1030, Rusty Russell wrote:
> > On Wed, 7 Dec 2011 17:21:22 +0200, "Michael S. Tsirkin" <mst@xxxxxxxxxx> wrote:
> > > Fix theoretical races related to refill work:
> > > 1. After napi is disabled by ndo_stop, refill work
> > > can run and re-enable it.
> > > 2. Refill can reschedule itself, if this happens
> > > it can run after cancel_delayed_work_sync,
> > > and will access device after it is destroyed.
> > >
> > > As a solution, add flags to track napi state and
> > > to disable refill, and toggle them on start, stop
> > > and remove; check these flags on refill.
> >
> > Why isn't a "dont-readd" flag sufficient?
> >
> > Cheers,
> > Rusty.
>
> I started with that, but here's the problem I wanted to
> address:
>
> - we run out of descriptors and schedule refill work
> - ndo_close runs
> - refill work runs
> - ndo_open runs

(s/ndo_close/ndo_stop/)

You don't think we should do any refills on a closed device? If so, we
simply move the refill-stop code into ndo_stop (aka virtnet_close), and
the refill-start code into ndo_open (aka. virtnet_open). Right?

Orthogonally, the refill-stop code is still buggy, as you noted. And
for self-rearming timers the pattern I've always used is a flag.

Or am I being obtuse again? :)
Rusty.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/