Re: [PATCH RFC] virtio_net: fix refill related races
From: Rusty Russell <hidden>
Date: 2011-12-12 03:05:19
Also in:
lkml, netdev
On Sun, 11 Dec 2011 16:44:29 +0200, "Michael S. Tsirkin" [off-list ref] wrote:
On Thu, Dec 08, 2011 at 03:07:29PM +1030, Rusty Russell wrote:quoted
On Wed, 7 Dec 2011 17:21:22 +0200, "Michael S. Tsirkin" [off-list ref] wrote:quoted
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.