u16 wqe_ix;
 
        /* UMR WQE (if in progress) is always at wq->head */
-       if (test_bit(MLX5E_RQ_STATE_UMR_WQE_IN_PROGRESS, &rq->state))
+       if (rq->wq_type == MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ &&
+           rq->mpwqe.umr_in_progress)
                mlx5e_free_rx_mpwqe(rq, &rq->mpwqe.info[wq->head]);
 
        while (!mlx5_wq_ll_is_empty(wq)) {
 
        struct mlx5_wq_ll *wq = &rq->wq;
        struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(wq, wq->head);
 
-       clear_bit(MLX5E_RQ_STATE_UMR_WQE_IN_PROGRESS, &rq->state);
+       rq->mpwqe.umr_in_progress = false;
 
        if (unlikely(!MLX5E_TEST_BIT(rq->state, MLX5E_RQ_STATE_ENABLED))) {
                mlx5e_free_rx_mpwqe(rq, &rq->mpwqe.info[wq->head]);
 {
        int err;
 
+       if (rq->mpwqe.umr_in_progress)
+               return -EBUSY;
+
        err = mlx5e_alloc_rx_umr_mpwqe(rq, ix);
        if (unlikely(err))
                return err;
-       set_bit(MLX5E_RQ_STATE_UMR_WQE_IN_PROGRESS, &rq->state);
+       rq->mpwqe.umr_in_progress = true;
        mlx5e_post_umr_wqe(rq, ix);
        return -EBUSY;
 }
        if (mlx5_wq_ll_is_full(wq))
                return false;
 
-       if (test_bit(MLX5E_RQ_STATE_UMR_WQE_IN_PROGRESS, &rq->state))
-               return true;
-
        do {
                struct mlx5e_rx_wqe *wqe = mlx5_wq_ll_get_wqe(wq, wq->head);