IB/mlx5: Fix memory leak in clean_mr error path
[linux-2.6-microblaze.git] / drivers / infiniband / hw / mlx5 / mr.c
index aa6f715..8cf53eb 100644 (file)
@@ -1490,19 +1490,19 @@ static int clean_mr(struct mlx5_ib_mr *mr)
        mlx5_free_priv_descs(mr);
 
        if (!allocated_from_cache) {
+               u32 key = mr->mmkey.key;
+
                err = destroy_mkey(dev, mr);
+               kfree(mr);
                if (err) {
                        mlx5_ib_warn(dev, "failed to destroy mkey 0x%x (%d)\n",
-                                    mr->mmkey.key, err);
+                                    key, err);
                        return err;
                }
        } else {
                mlx5_mr_cache_free(dev, mr);
        }
 
-       if (!allocated_from_cache)
-               kfree(mr);
-
        return 0;
 }