Skip to content

Commit

Permalink
net: hns: fix bug that alloc skb fail lead to port unavailable
Browse files Browse the repository at this point in the history
When hns_nic_poll_rx_skb alloc skb fail, it will break receive cycle and
read new fbd_num to start new receive cycle. It recomputes cycle num is
fbd_num minus clean_count, actually this cycle num is too big because
it drop out receive cycle. It brings about the port unavailable.

So we will goto out when alloc skb fail to fix this bug.

Signed-off-by: Jun He <hjat2005@huawei.com>
Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jun He authored and David S. Miller committed Jun 21, 2016
1 parent d8a8371 commit 3a31b64
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions drivers/net/ethernet/hisilicon/hns/hns_enet.c
Original file line number Diff line number Diff line change
Expand Up @@ -768,10 +768,10 @@ static int hns_nic_rx_poll_one(struct hns_nic_ring_data *ring_data,
clean_count = 0;
}

/* poll one pkg*/
/* poll one pkt*/
err = hns_nic_poll_rx_skb(ring_data, &skb, &bnum);
if (unlikely(!skb)) /* this fault cannot be repaired */
break;
goto out;

recv_bds += bnum;
clean_count += bnum;
Expand All @@ -797,6 +797,7 @@ static int hns_nic_rx_poll_one(struct hns_nic_ring_data *ring_data,
}
}

out:
/* make all data has been write before submit */
if (clean_count > 0)
hns_nic_alloc_rx_buffers(ring_data, clean_count);
Expand Down

0 comments on commit 3a31b64

Please sign in to comment.