list_del_init(&rq->queuelist);
                ret = blk_mq_request_issue_directly(rq, list_empty(list));
-               if (ret != BLK_STS_OK) {
-                       if (ret == BLK_STS_RESOURCE ||
-                                       ret == BLK_STS_DEV_RESOURCE) {
-                               blk_mq_request_bypass_insert(rq, false,
-                                                       list_empty(list));
-                               break;
-                       }
-                       blk_mq_end_request(rq, ret);
-               } else
+               switch (ret) {
+               case BLK_STS_OK:
                        queued++;
+                       break;
+               case BLK_STS_RESOURCE:
+               case BLK_STS_DEV_RESOURCE:
+                       blk_mq_request_bypass_insert(rq, false,
+                                                    list_empty(list));
+                       goto out;
+               default:
+                       blk_mq_end_request(rq, ret);
+                       break;
+               }
        }
 
+out:
        if (ret != BLK_STS_OK)
                blk_mq_commit_rqs(hctx, queued, false);
 }