Re: [PATCH] virtio_net: Use BUG_ON instead of if condition followed by BUG

From: Xianting Tian
Date: Tue May 18 2021 - 05:20:45 EST


thanks for your comments,
It is a good idea, I think we can follow the similar logic in function 'receive_buf':
if (virtio_net_hdr_to_skb(skb, &hdr->hdr,
virtio_is_little_endian(vi->vdev))) {
net_warn_ratelimited("%s: bad gso: type: %u, size:%u\n",
dev->name, hdr->hdr.gso_type,
hdr->hdr.gso_size);
goto frame_err;
}

I will summit a new patch later.


在 2021/5/17 下午10:35, Andrew Lunn 写道:
On Mon, May 17, 2021 at 09:31:19PM +0800, Xianting Tian wrote:
BUG_ON() uses unlikely in if(), which can be optimized at compile time.

Signed-off-by: Xianting Tian <xianting.tian@xxxxxxxxxxxxxxxxx>
---
drivers/net/virtio_net.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index c921ebf3ae82..212d52204884 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1646,10 +1646,9 @@ static int xmit_skb(struct send_queue *sq, struct
sk_buff *skb)
else
hdr = skb_vnet_hdr(skb);

- if (virtio_net_hdr_from_skb(skb, &hdr->hdr,

How fatal is it not being able to get the header from the skb? There
has been push back on the use of BUG() or its variants, since it kills
the machine dead. Would it be possible to turn this into a WARN_ON and
return -EPROTO or something?

Andrew