mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
If netdev_add tap,id=net0,...,vhost=on failed in net_init_tap_one(),
the followed up device_add virtio-net-pci,netdev=net0 will fail
too, prints:
TUNSETOFFLOAD ioctl() failed: Bad file descriptor TUNSETOFFLOAD
ioctl() failed: Bad file descriptor
The reason is that the fd of tap is closed when error occured after
calling net_init_tap_one().
The fd should be closed when calling net_init_tap_one failed:
- if tap_set_sndbuf() failed
- if tap_set_sndbuf() succeeded but vhost failed to open or
initialize with vhostforce flag on
- with wrong vhost command line parameter
The fd should not be closed just because vhost failed to open or
initialize but without vhostforce flag. So the followed up
device_add can fall back to userspace virtio successfully.
Suggested-by: Michael S. Tsirkin <mst@redhat.com>
Suggested-by: Igor Mammedov <imammedo@redhat.com>
Suggested-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Jay Zhou <jianjay.zhou@huawei.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||
|---|---|---|
| .. | ||
| can | ||
| checksum.c | ||
| clients.h | ||
| colo-compare.c | ||
| colo.c | ||
| colo.h | ||
| dump.c | ||
| eth.c | ||
| filter-buffer.c | ||
| filter-mirror.c | ||
| filter-replay.c | ||
| filter-rewriter.c | ||
| filter.c | ||
| hub.c | ||
| hub.h | ||
| l2tpv3.c | ||
| Makefile.objs | ||
| net.c | ||
| netmap.c | ||
| queue.c | ||
| slirp.c | ||
| socket.c | ||
| tap-bsd.c | ||
| tap-linux.c | ||
| tap-linux.h | ||
| tap-solaris.c | ||
| tap-stub.c | ||
| tap-win32.c | ||
| tap.c | ||
| tap_int.h | ||
| trace-events | ||
| util.c | ||
| util.h | ||
| vde.c | ||
| vhost-user.c | ||