Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / drivers / net / mlx4 / icm.c
index 57288ca..b07e4de 100644 (file)
@@ -163,28 +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 (ret) {
+                       if (--cur_order < 0)
+                               goto fail;
+                       else
+                               continue;
+               }
 
-                               if (chunk->nsg <= 0)
-                                       goto fail;
+               ++chunk->npages;
 
-                               chunk = NULL;
-                       }
+               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);
 
-                       npages -= 1 << cur_order;
-               } else {
-                       --cur_order;
-                       if (cur_order < 0)
+                       if (chunk->nsg <= 0)
                                goto fail;
                }
+
+               if (chunk->npages == MLX4_ICM_CHUNK_LEN)
+                       chunk = NULL;
+
+               npages -= 1 << cur_order;
        }
 
        if (!coherent && chunk) {