Skip to content

Commit

Permalink
[PATCH] skge: handle out of memory on MTU size changes
Browse files Browse the repository at this point in the history
Changing the MTU size causes the receiver to have to reallocate buffers.
If this allocation fails, then we need to return an error, and take
the device offline. It can then be brought back up or reconfigured
for a smaller MTU.

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
  • Loading branch information
Stephen Hemminger authored and Jeff Garzik committed Dec 24, 2005
1 parent e8df855 commit 7731a4e
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions drivers/net/skge.c
Original file line number Diff line number Diff line change
Expand Up @@ -2192,6 +2192,7 @@ static int skge_up(struct net_device *dev)
kfree(skge->rx_ring.start);
free_pci_mem:
pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma);
skge->mem = NULL;

return err;
}
Expand All @@ -2202,6 +2203,9 @@ static int skge_down(struct net_device *dev)
struct skge_hw *hw = skge->hw;
int port = skge->port;

if (skge->mem == NULL)
return 0;

if (netif_msg_ifdown(skge))
printk(KERN_INFO PFX "%s: disabling interface\n", dev->name);

Expand Down Expand Up @@ -2258,6 +2262,7 @@ static int skge_down(struct net_device *dev)
kfree(skge->rx_ring.start);
kfree(skge->tx_ring.start);
pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma);
skge->mem = NULL;
return 0;
}

Expand Down Expand Up @@ -2418,18 +2423,23 @@ static void skge_tx_timeout(struct net_device *dev)

static int skge_change_mtu(struct net_device *dev, int new_mtu)
{
int err = 0;
int running = netif_running(dev);
int err;

if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU)
return -EINVAL;

if (!netif_running(dev)) {
dev->mtu = new_mtu;
return 0;
}

skge_down(dev);

if (running)
skge_down(dev);
dev->mtu = new_mtu;
if (running)
skge_up(dev);

err = skge_up(dev);
if (err)
dev_close(dev);

return err;
}
Expand Down

0 comments on commit 7731a4e

Please sign in to comment.