diff options
author | wangweidong <wangweidong1@huawei.com> | 2016-01-13 06:11:09 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-01-13 23:48:14 +0300 |
commit | 701a0fd5231866db08cebcd502894699f49cb960 (patch) | |
tree | 06318a9113f6145487379ba811e24e7b3f4501f1 /drivers/net | |
parent | 1adbfc435f0897101443975fdbd20e8817ad5fd9 (diff) | |
download | linux-701a0fd5231866db08cebcd502894699f49cb960.tar.xz |
hip04_eth: fix missing error handle for build_skb failed
when build_skb failed, we should goto refill the buffer.
Signed-off-by: Weidong Wang <wangweidong1@huawei.com>
Acked-by: Ding Tainhong <dingtianhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/hisilicon/hip04_eth.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/ethernet/hisilicon/hip04_eth.c b/drivers/net/ethernet/hisilicon/hip04_eth.c index 253f8ed0537a..0c4afe95ef54 100644 --- a/drivers/net/ethernet/hisilicon/hip04_eth.c +++ b/drivers/net/ethernet/hisilicon/hip04_eth.c @@ -500,8 +500,10 @@ static int hip04_rx_poll(struct napi_struct *napi, int budget) while (cnt && !last) { buf = priv->rx_buf[priv->rx_head]; skb = build_skb(buf, priv->rx_buf_size); - if (unlikely(!skb)) + if (unlikely(!skb)) { net_dbg_ratelimited("build_skb failed\n"); + goto refill; + } dma_unmap_single(&ndev->dev, priv->rx_phys[priv->rx_head], RX_BUF_SIZE, DMA_FROM_DEVICE); @@ -528,6 +530,7 @@ static int hip04_rx_poll(struct napi_struct *napi, int budget) rx++; } +refill: buf = netdev_alloc_frag(priv->rx_buf_size); if (!buf) goto done; |