mlx4_core: Clean up mlx4_alloc_icm() a bit
authorRoland Dreier <rolandd@cisco.com>
Thu, 20 May 2010 22:58:22 +0000 (15:58 -0700)
committerRoland Dreier <rolandd@cisco.com>
Thu, 20 May 2010 22:58:22 +0000 (15:58 -0700)
Handle the allocation error case first, so that we don't have further
nested if for handling the common case of success.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/net/mlx4/icm.c

index ef62f17..b07e4de 100644 (file)
@@ -163,29 +163,30 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
                        ret = mlx4_alloc_icm_pages(&chunk->mem[chunk->npages],
                                                   cur_order, gfp_mask);
 
-               if (!ret) {
-                       ++chunk->npages;
-
-                       if (coherent)
-                               ++chunk->nsg;
-                       else if (chunk->npages == MLX4_ICM_CHUNK_LEN) {
-                               chunk->nsg = pci_map_sg(dev->pdev, chunk->mem,
-                                                       chunk->npages,
-                                                       PCI_DMA_BIDIRECTIONAL);
-
-                               if (chunk->nsg <= 0)
-                                       goto fail;
-                       }
+               if (ret) {
+                       if (--cur_order < 0)
+                               goto fail;
+                       else
+                               continue;
+               }
 
-                       if (chunk->npages == MLX4_ICM_CHUNK_LEN)
-                               chunk = NULL;
+               ++chunk->npages;
 
-                       npages -= 1 << cur_order;
-               } else {
-                       --cur_order;
-                       if (cur_order < 0)
+               if (coherent)
+                       ++chunk->nsg;
+               else if (chunk->npages == MLX4_ICM_CHUNK_LEN) {
+                       chunk->nsg = pci_map_sg(dev->pdev, chunk->mem,
+                                               chunk->npages,
+                                               PCI_DMA_BIDIRECTIONAL);
+
+                       if (chunk->nsg <= 0)
                                goto fail;
                }
+
+               if (chunk->npages == MLX4_ICM_CHUNK_LEN)
+                       chunk = NULL;
+
+               npages -= 1 << cur_order;
        }
 
        if (!coherent && chunk) {