Hi Ming On 08/11/2018 03:12 PM, Ming Lei wrote: > +static blk_status_t scsi_admin_queue_rq(struct blk_mq_hw_ctx *hctx, > + const struct blk_mq_queue_data *bd) > +{ > + struct scsi_device *sdev = scsi_req(bd->rq)->sdev; > + > + WARN_ON_ONCE(hctx->queue == sdev->request_queue); > + > + if (!__scsi_mq_get_budget(hctx, sdev)) > + return BLK_STS_RESOURCE; > + > + return __scsi_queue_rq(hctx, bd, sdev); > +} Why does it return BLK_STS_RESOURCE here ? Do you want to use the following code branch in blk_mq_dispatch_rq_list to get the admin queue rerun ? else if (needs_restart && (ret == BLK_STS_RESOURCE)) blk_mq_delay_run_hw_queue(hctx, BLK_MQ_RESOURCE_DELAY); In theory, BLK_STS_DEV_RESOURCE should be returned here. However, I guess it will not work. Because the rr fashion loop restart has gone, the completion of normal queue will not restart the admin queue. If yes, please add some comment here to describe it. :) Thanks Jianchao