Hi,
I have met a netback issue.
when a socket connect between Host and VM,the server in Host and client in VM,if the client send
message,but server don’t receive packet with some unknown reason,now shutdown the VM,
netback’s xenwatch_dev_cb kernel thread into D states, Until kill server process, netback exit D states,
the stack of xenwatch_dev_cb is:
[<ffffffffa0947135>] netif_disconnect+0x75/0x200 [netbk]
[<ffffffffa0945f06>] netback_disconnect+0x76/0xb0 [netbk]
[<ffffffffa094671a>] frontend_changed+0x12a/0x430 [netbk]
[<ffffffff802f5add>] xenwatch_dev_callback+0x8d/0x120
[<ffffffff80069c16>] kthread+0x96/0xa0
[<ffffffff80415f74>] kernel_thread_helper+0x4/0x10
By analyzing the module drivers/xen/netback, I think the reason is as follows:
1.
the thread hold in wait_event(netif->waiting_to_free, atomic_read(&netif->refcnt) == 0)
in netif_disconnect fun, because netif->refcnt not equal 0;
2.
when the socket connected but server don’t receive packet,the skb from netback will be queued in socket’s list, and skb’s page can’t be unmap, the
netback’s refcnt can’t be decrease.
Xen4.1.2 and host is SUSE 11 SP3, kernel 3.0.93-0.8-xen;
Does anyone have met such problems? Thanks.
Best regards,
Zhang Yabin