mlx4_en: Fix error handling while activating RX rings
authorYevgeny Petrilin <yevgenyp@mellanox.co.il>
Mon, 20 Apr 2009 04:24:28 +0000 (04:24 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Apr 2009 08:47:03 +0000 (01:47 -0700)
In case of failure of either srq creation or page allocation,
the cleanup code handled the failed ring as well, and tried
to destroy resources that where not allocated.

Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/mlx4/en_rx.c

index 7e40741fb7d87ef9d1136797cb54145db8cbe6dc..8673008f72dfd1f627234298ccc8abdc6280cb46 100644 (file)
@@ -436,8 +436,9 @@ int mlx4_en_activate_rx_rings(struct mlx4_en_priv *priv)
                /* Initialize page allocators */
                err = mlx4_en_init_allocator(priv, ring);
                if (err) {
-                        mlx4_err(mdev, "Failed initializing ring allocator\n");
-                        goto err_allocator;
+                       mlx4_err(mdev, "Failed initializing ring allocator\n");
+                       ring_ind--;
+                       goto err_allocator;
                }
 
                /* Fill Rx buffers */
@@ -467,6 +468,7 @@ int mlx4_en_activate_rx_rings(struct mlx4_en_priv *priv)
                                     ring->wqres.db.dma, &ring->srq);
                if (err){
                        mlx4_err(mdev, "Failed to allocate srq\n");
+                       ring_ind--;
                        goto err_srq;
                }
                ring->srq.event = mlx4_en_srq_event;