bool no_tag = false;
        int errors, queued;
        blk_status_t ret = BLK_STS_OK;
+       bool no_budget_avail = false;
 
        if (list_empty(list))
                return false;
                hctx = rq->mq_hctx;
                if (!got_budget && !blk_mq_get_dispatch_budget(hctx)) {
                        blk_mq_put_driver_tag(rq);
+                       no_budget_avail = true;
                        break;
                }
 
                 *
                 * If driver returns BLK_STS_RESOURCE and SCHED_RESTART
                 * bit is set, run queue after a delay to avoid IO stalls
-                * that could otherwise occur if the queue is idle.
+                * that could otherwise occur if the queue is idle.  We'll do
+                * similar if we couldn't get budget and SCHED_RESTART is set.
                 */
                needs_restart = blk_mq_sched_needs_restart(hctx);
                if (!needs_restart ||
                    (no_tag && list_empty_careful(&hctx->dispatch_wait.entry)))
                        blk_mq_run_hw_queue(hctx, true);
-               else if (needs_restart && (ret == BLK_STS_RESOURCE))
+               else if (needs_restart && (ret == BLK_STS_RESOURCE ||
+                                          no_budget_avail))
                        blk_mq_delay_run_hw_queue(hctx, BLK_MQ_RESOURCE_DELAY);
 
                blk_mq_update_dispatch_busy(hctx, true);