From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752394AbaIGIjv (ORCPT ); Sun, 7 Sep 2014 04:39:51 -0400 Received: from mail-pa0-f54.google.com ([209.85.220.54]:39664 "EHLO mail-pa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752271AbaIGIjq (ORCPT ); Sun, 7 Sep 2014 04:39:46 -0400 From: Ming Lei To: Jens Axboe , linux-kernel@vger.kernel.org Cc: linux-scsi@vger.kernel.org, Christoph Hellwig , Ming Lei Subject: [PATCH 4/6] virtio-blk: implement init_flush_rq Date: Sun, 7 Sep 2014 16:39:20 +0800 Message-Id: <1410079162-9872-5-git-send-email-ming.lei@canonical.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1410079162-9872-1-git-send-email-ming.lei@canonical.com> References: <1410079162-9872-1-git-send-email-ming.lei@canonical.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now we use init_flush_rq callback to initialize pdu of flush req. Signed-off-by: Ming Lei --- drivers/block/virtio_blk.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 0a58140..f478ec8 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c @@ -177,7 +177,6 @@ static int virtio_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req) BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems); - vbr->req = req; if (req->cmd_flags & REQ_FLUSH) { vbr->out_hdr.type = VIRTIO_BLK_T_FLUSH; vbr->out_hdr.sector = 0; @@ -556,6 +555,19 @@ static int virtblk_init_request(void *data, struct request *rq, struct virtio_blk *vblk = data; struct virtblk_req *vbr = blk_mq_rq_to_pdu(rq); + vbr->req = rq; + sg_init_table(vbr->sg, vblk->sg_elems); + return 0; +} + +static int virtblk_init_flush_rq(struct request_queue *q, + struct request *rq) +{ + /* q->queuedata isn't setup yet */ + struct virtio_blk *vblk = q->tag_set->driver_data; + struct virtblk_req *vbr = blk_mq_rq_to_pdu(rq); + + vbr->req = rq; sg_init_table(vbr->sg, vblk->sg_elems); return 0; } @@ -565,6 +577,7 @@ static struct blk_mq_ops virtio_mq_ops = { .map_queue = blk_mq_map_queue, .complete = virtblk_request_done, .init_request = virtblk_init_request, + .init_flush_rq = virtblk_init_flush_rq, }; static unsigned int virtblk_queue_depth; -- 1.7.9.5