virtio-net: fix the race between channels setting and refill
authorJason Wang <jasowang@redhat.com>
Thu, 4 Jul 2013 01:52:57 +0000 (11:22 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 4 Jul 2013 01:55:06 +0000 (11:25 +0930)
commit9b9cd8024a2882e896c65222aa421d461354e3f2
tree16d4ce44ff3f326828e32c2b7c2073f12f37d9b1
parent0d69a65e97fc8090ee83c8639137b4b5c8ece237
virtio-net: fix the race between channels setting and refill

Commit 55257d72bd1c51f25106350f4983ec19f62ed1fa (virtio-net: fill only rx queues
which are being used) tries to refill on demand when changing the number of
channels by call try_refill_recv() directly, this may race:

- the refill work who may do the refill in the same time
- the try_refill_recv() called in bh since napi was not disabled

Which may led guest complain during setting channels:

virtio_net virtio0: input.1:id 0 is not a head!

Solve this issue by scheduling a refill work which can guarantee the
serialization of refill.

Cc: Sasha Levin <sasha.levin@oracle.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/net/virtio_net.c