net/mlx4_core: clean up cq_res_start_move_to()
[cascardo/linux.git] / drivers / net / ethernet / mellanox / mlx4 / resource_tracker.c
index 2e3232c..7abd20c 100644 (file)
@@ -1340,43 +1340,29 @@ static int cq_res_start_move_to(struct mlx4_dev *dev, int slave, int cqn,
 
        spin_lock_irq(mlx4_tlock(dev));
        r = res_tracker_lookup(&tracker->res_tree[RES_CQ], cqn);
-       if (!r)
+       if (!r) {
                err = -ENOENT;
-       else if (r->com.owner != slave)
+       } else if (r->com.owner != slave) {
                err = -EPERM;
-       else {
-               switch (state) {
-               case RES_CQ_BUSY:
-                       err = -EBUSY;
-                       break;
-
-               case RES_CQ_ALLOCATED:
-                       if (r->com.state != RES_CQ_HW)
-                               err = -EINVAL;
-                       else if (atomic_read(&r->ref_count))
-                               err = -EBUSY;
-                       else
-                               err = 0;
-                       break;
-
-               case RES_CQ_HW:
-                       if (r->com.state != RES_CQ_ALLOCATED)
-                               err = -EINVAL;
-                       else
-                               err = 0;
-                       break;
-
-               default:
+       } else if (state == RES_CQ_ALLOCATED) {
+               if (r->com.state != RES_CQ_HW)
                        err = -EINVAL;
-               }
+               else if (atomic_read(&r->ref_count))
+                       err = -EBUSY;
+               else
+                       err = 0;
+       } else if (state != RES_CQ_HW || r->com.state != RES_CQ_ALLOCATED) {
+               err = -EINVAL;
+       } else {
+               err = 0;
+       }
 
-               if (!err) {
-                       r->com.from_state = r->com.state;
-                       r->com.to_state = state;
-                       r->com.state = RES_CQ_BUSY;
-                       if (cq)
-                               *cq = r;
-               }
+       if (!err) {
+               r->com.from_state = r->com.state;
+               r->com.to_state = state;
+               r->com.state = RES_CQ_BUSY;
+               if (cq)
+                       *cq = r;
        }
 
        spin_unlock_irq(mlx4_tlock(dev));