On Tue, Apr 05, 2022 at 02:31:21PM +0900, Suwan Kim wrote: > +static int virtblk_poll(struct blk_mq_hw_ctx *hctx, struct io_comp_batch *iob) > +{ > + struct virtio_blk *vblk = hctx->queue->queuedata; > + struct virtio_blk_vq *vq = hctx->driver_data; > + struct virtblk_req *vbr; > + bool req_done = false; > + unsigned long flags; > + unsigned int len; > + int found = 0; > + > + spin_lock_irqsave(&vq->lock, flags); > + > + while ((vbr = virtqueue_get_buf(vq->vq, &len)) != NULL) { > + struct request *req = blk_mq_rq_from_pdu(vbr); > > - return blk_mq_virtio_map_queues(&set->map[HCTX_TYPE_DEFAULT], > - vblk->vdev, 0); > + found++; > + if (!blk_mq_add_to_batch(req, iob, vbr->status, > + virtblk_complete_batch)) > + blk_mq_complete_request(req); > + req_done = true; > + } > + > + if (req_done) Minor nit: req_done can be replaced with found > 0. > + blk_mq_start_stopped_hw_queues(vblk->disk->queue, true); > + > + spin_unlock_irqrestore(&vq->lock, flags); > + > + return found; > +}