From: Christoph Hellwig <hch@lst.de> To: Jens Axboe <axboe@kernel.dk> Cc: "Josef Bacik" <jbacik@fb.com>, "James Smart" <james.smart@broadcom.com>, "Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>, "Roger Pau Monné" <roger.pau@citrix.com>, linux-scsi@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH 15/23] xen-blkfront: don't use req->errors Date: Wed, 19 Apr 2017 21:27:00 +0200 [thread overview] Message-ID: <20170419192708.22098-16-hch@lst.de> (raw) In-Reply-To: <20170419192708.22098-1-hch@lst.de> xen-blkfron is the last users using rq->errros for passing back error to blk-mq, and I'd like to get rid of that. In the longer run the driver should be moving more of the completion processing into .complete, but this is the minimal change to move forward for now. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Roger Pau Monné <roger.pau@citrix.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> --- drivers/block/xen-blkfront.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index abed296ce605..57866355c060 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -115,6 +115,15 @@ struct split_bio { atomic_t pending; }; +struct blkif_req { + int error; +}; + +static inline struct blkif_req *blkif_req(struct request *rq) +{ + return blk_mq_rq_to_pdu(rq); +} + static DEFINE_MUTEX(blkfront_mutex); static const struct block_device_operations xlvbd_block_fops; @@ -907,8 +916,14 @@ static int blkif_queue_rq(struct blk_mq_hw_ctx *hctx, return BLK_MQ_RQ_QUEUE_BUSY; } +static void blkif_complete_rq(struct request *rq) +{ + blk_mq_end_request(rq, blkif_req(rq)->error); +} + static const struct blk_mq_ops blkfront_mq_ops = { .queue_rq = blkif_queue_rq, + .complete = blkif_complete_rq, }; static void blkif_set_queue_limits(struct blkfront_info *info) @@ -969,7 +984,7 @@ static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size, info->tag_set.queue_depth = BLK_RING_SIZE(info); info->tag_set.numa_node = NUMA_NO_NODE; info->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE; - info->tag_set.cmd_size = 0; + info->tag_set.cmd_size = sizeof(struct blkif_req); info->tag_set.driver_data = info; if (blk_mq_alloc_tag_set(&info->tag_set)) @@ -1543,7 +1558,6 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) unsigned long flags; struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id; struct blkfront_info *info = rinfo->dev_info; - int error; if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) return IRQ_HANDLED; @@ -1587,37 +1601,36 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) continue; } - error = (bret->status == BLKIF_RSP_OKAY) ? 0 : -EIO; + blkif_req(req)->error = (bret->status == BLKIF_RSP_OKAY) ? 0 : -EIO; switch (bret->operation) { case BLKIF_OP_DISCARD: if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { struct request_queue *rq = info->rq; printk(KERN_WARNING "blkfront: %s: %s op failed\n", info->gd->disk_name, op_name(bret->operation)); - error = -EOPNOTSUPP; + blkif_req(req)->error = -EOPNOTSUPP; info->feature_discard = 0; info->feature_secdiscard = 0; queue_flag_clear(QUEUE_FLAG_DISCARD, rq); queue_flag_clear(QUEUE_FLAG_SECERASE, rq); } - blk_mq_complete_request(req, error); break; case BLKIF_OP_FLUSH_DISKCACHE: case BLKIF_OP_WRITE_BARRIER: if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { printk(KERN_WARNING "blkfront: %s: %s op failed\n", info->gd->disk_name, op_name(bret->operation)); - error = -EOPNOTSUPP; + blkif_req(req)->error = -EOPNOTSUPP; } if (unlikely(bret->status == BLKIF_RSP_ERROR && rinfo->shadow[id].req.u.rw.nr_segments == 0)) { printk(KERN_WARNING "blkfront: %s: empty %s op failed\n", info->gd->disk_name, op_name(bret->operation)); - error = -EOPNOTSUPP; + blkif_req(req)->error = -EOPNOTSUPP; } - if (unlikely(error)) { - if (error == -EOPNOTSUPP) - error = 0; + if (unlikely(blkif_req(req)->error)) { + if (blkif_req(req)->error == -EOPNOTSUPP) + blkif_req(req)->error = 0; info->feature_fua = 0; info->feature_flush = 0; xlvbd_flush(info); @@ -1629,11 +1642,12 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) dev_dbg(&info->xbdev->dev, "Bad return from blkdev data " "request: %x\n", bret->status); - blk_mq_complete_request(req, error); break; default: BUG(); } + + blk_mq_complete_request(req, 0); } rinfo->ring.rsp_cons = i; -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: hch@lst.de (Christoph Hellwig) Subject: [PATCH 15/23] xen-blkfront: don't use req->errors Date: Wed, 19 Apr 2017 21:27:00 +0200 [thread overview] Message-ID: <20170419192708.22098-16-hch@lst.de> (raw) In-Reply-To: <20170419192708.22098-1-hch@lst.de> xen-blkfron is the last users using rq->errros for passing back error to blk-mq, and I'd like to get rid of that. In the longer run the driver should be moving more of the completion processing into .complete, but this is the minimal change to move forward for now. Signed-off-by: Christoph Hellwig <hch at lst.de> Acked-by: Roger Pau Monn? <roger.pau at citrix.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk at oracle.com> --- drivers/block/xen-blkfront.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index abed296ce605..57866355c060 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -115,6 +115,15 @@ struct split_bio { atomic_t pending; }; +struct blkif_req { + int error; +}; + +static inline struct blkif_req *blkif_req(struct request *rq) +{ + return blk_mq_rq_to_pdu(rq); +} + static DEFINE_MUTEX(blkfront_mutex); static const struct block_device_operations xlvbd_block_fops; @@ -907,8 +916,14 @@ static int blkif_queue_rq(struct blk_mq_hw_ctx *hctx, return BLK_MQ_RQ_QUEUE_BUSY; } +static void blkif_complete_rq(struct request *rq) +{ + blk_mq_end_request(rq, blkif_req(rq)->error); +} + static const struct blk_mq_ops blkfront_mq_ops = { .queue_rq = blkif_queue_rq, + .complete = blkif_complete_rq, }; static void blkif_set_queue_limits(struct blkfront_info *info) @@ -969,7 +984,7 @@ static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size, info->tag_set.queue_depth = BLK_RING_SIZE(info); info->tag_set.numa_node = NUMA_NO_NODE; info->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE; - info->tag_set.cmd_size = 0; + info->tag_set.cmd_size = sizeof(struct blkif_req); info->tag_set.driver_data = info; if (blk_mq_alloc_tag_set(&info->tag_set)) @@ -1543,7 +1558,6 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) unsigned long flags; struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id; struct blkfront_info *info = rinfo->dev_info; - int error; if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) return IRQ_HANDLED; @@ -1587,37 +1601,36 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) continue; } - error = (bret->status == BLKIF_RSP_OKAY) ? 0 : -EIO; + blkif_req(req)->error = (bret->status == BLKIF_RSP_OKAY) ? 0 : -EIO; switch (bret->operation) { case BLKIF_OP_DISCARD: if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { struct request_queue *rq = info->rq; printk(KERN_WARNING "blkfront: %s: %s op failed\n", info->gd->disk_name, op_name(bret->operation)); - error = -EOPNOTSUPP; + blkif_req(req)->error = -EOPNOTSUPP; info->feature_discard = 0; info->feature_secdiscard = 0; queue_flag_clear(QUEUE_FLAG_DISCARD, rq); queue_flag_clear(QUEUE_FLAG_SECERASE, rq); } - blk_mq_complete_request(req, error); break; case BLKIF_OP_FLUSH_DISKCACHE: case BLKIF_OP_WRITE_BARRIER: if (unlikely(bret->status == BLKIF_RSP_EOPNOTSUPP)) { printk(KERN_WARNING "blkfront: %s: %s op failed\n", info->gd->disk_name, op_name(bret->operation)); - error = -EOPNOTSUPP; + blkif_req(req)->error = -EOPNOTSUPP; } if (unlikely(bret->status == BLKIF_RSP_ERROR && rinfo->shadow[id].req.u.rw.nr_segments == 0)) { printk(KERN_WARNING "blkfront: %s: empty %s op failed\n", info->gd->disk_name, op_name(bret->operation)); - error = -EOPNOTSUPP; + blkif_req(req)->error = -EOPNOTSUPP; } - if (unlikely(error)) { - if (error == -EOPNOTSUPP) - error = 0; + if (unlikely(blkif_req(req)->error)) { + if (blkif_req(req)->error == -EOPNOTSUPP) + blkif_req(req)->error = 0; info->feature_fua = 0; info->feature_flush = 0; xlvbd_flush(info); @@ -1629,11 +1642,12 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) dev_dbg(&info->xbdev->dev, "Bad return from blkdev data " "request: %x\n", bret->status); - blk_mq_complete_request(req, error); break; default: BUG(); } + + blk_mq_complete_request(req, 0); } rinfo->ring.rsp_cons = i; -- 2.11.0
next prev parent reply other threads:[~2017-04-19 19:27 UTC|newest] Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-04-19 19:26 kill req->errors V3 Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 01/23] pd: don't check blk_execute_rq return value Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 21:02 ` Bart Van Assche 2017-04-19 21:02 ` Bart Van Assche 2017-04-19 21:02 ` Bart Van Assche 2017-04-19 19:26 ` [PATCH 02/23] block: remove the " Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 21:07 ` Bart Van Assche 2017-04-19 21:07 ` Bart Van Assche 2017-04-19 21:07 ` Bart Van Assche 2017-04-20 5:11 ` hch 2017-04-20 5:11 ` hch 2017-04-19 19:26 ` [PATCH 03/23] nvme-fc: fix status code handling in nvme_fc_fcpio_done Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 04/23] nvme: split nvme status from block req->errors Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 05/23] nvme: make nvme_error_status private Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 06/23] virtio: fix spelling of virtblk_scsi_request_done Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 07/23] virtio_blk: don't use req->errors Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 08/23] scsi: introduce a result field in struct scsi_request Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-20 1:43 ` Martin K. Petersen 2017-04-20 1:43 ` Martin K. Petersen 2017-04-20 5:17 ` Christoph Hellwig 2017-04-20 5:17 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 09/23] loop: zero-fill bio on the submitting cpu Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 10/23] null_blk: don't pass always-0 req->errors to blk_mq_complete_request Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 11/23] dm rq: don't pass irrelevant error code " Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 12/23] dm mpath: don't check for req->errors Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 13/23] nbd: don't use req->errors Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:26 ` [PATCH 14/23] mtip32xx: add a status field to struct mtip_cmd Christoph Hellwig 2017-04-19 19:26 ` Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig [this message] 2017-04-19 19:27 ` [PATCH 15/23] xen-blkfront: don't use req->errors Christoph Hellwig 2017-04-19 19:27 ` [PATCH 16/23] blk-mq: remove the error argument to blk_mq_complete_request Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 17/23] blk-mq: simplify __blk_mq_complete_request Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 18/23] block: add a error_count field to struct request Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 19/23] floppy: switch from req->errors to req->error_count Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 20/23] ataflop: " Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 21/23] swim3: remove (commented out) printing of req->errors Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 22/23] blktrace: remove the unused block_rq_abort tracepoint Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 19:27 ` [PATCH 23/23] block: remove the errors field from struct request Christoph Hellwig 2017-04-19 19:27 ` Christoph Hellwig 2017-04-19 21:10 ` Bart Van Assche 2017-04-19 21:10 ` Bart Van Assche 2017-04-19 21:10 ` Bart Van Assche 2017-04-20 14:02 kill req->errors V4 Christoph Hellwig 2017-04-20 14:03 ` [PATCH 15/23] xen-blkfront: don't use req->errors Christoph Hellwig 2017-04-20 14:03 ` Christoph Hellwig
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170419192708.22098-16-hch@lst.de \ --to=hch@lst.de \ --cc=axboe@kernel.dk \ --cc=dm-devel@redhat.com \ --cc=james.smart@broadcom.com \ --cc=jbacik@fb.com \ --cc=konrad.wilk@oracle.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=linux-scsi@vger.kernel.org \ --cc=roger.pau@citrix.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.