From: Ming Lei <ming.lei@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: "Jens Axboe" <axboe@kernel.dk>, "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: Re: [PATCH 10/25] loop: zero-fill bio on the submitting cpu
Date: Wed, 12 Apr 2017 18:24:35 +0800 [thread overview]
Message-ID: <20170412102434.GB8835@ming.t460p> (raw)
In-Reply-To: <20170406153944.10058-11-hch@lst.de>
On Thu, Apr 06, 2017 at 05:39:29PM +0200, Christoph Hellwig wrote:
> In thruth I've just audited which blk-mq drivers don't currently have a
> complete callback, but I think this change is at least borderline useful.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> drivers/block/loop.c | 30 ++++++++++++++----------------
> drivers/block/loop.h | 1 +
> 2 files changed, 15 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index cc981f34e017..6924ec611a49 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -445,32 +445,27 @@ static int lo_req_flush(struct loop_device *lo, struct request *rq)
> return ret;
> }
>
> -static inline void handle_partial_read(struct loop_cmd *cmd, long bytes)
> +static void lo_complete_rq(struct request *rq)
> {
> - if (bytes < 0 || op_is_write(req_op(cmd->rq)))
> - return;
> + struct loop_cmd *cmd = blk_mq_rq_to_pdu(rq);
>
> - if (unlikely(bytes < blk_rq_bytes(cmd->rq))) {
> + if (unlikely(req_op(cmd->rq) == REQ_OP_READ && cmd->use_aio &&
> + cmd->ret >= 0 && cmd->ret < blk_rq_bytes(cmd->rq))) {
> struct bio *bio = cmd->rq->bio;
>
> - bio_advance(bio, bytes);
> + bio_advance(bio, cmd->ret);
> zero_fill_bio(bio);
> }
> +
> + blk_mq_end_request(rq, cmd->ret < 0 ? -EIO : 0);
> }
>
> static void lo_rw_aio_complete(struct kiocb *iocb, long ret, long ret2)
> {
> struct loop_cmd *cmd = container_of(iocb, struct loop_cmd, iocb);
> - struct request *rq = cmd->rq;
> -
> - handle_partial_read(cmd, ret);
>
> - if (ret > 0)
> - ret = 0;
> - else if (ret < 0)
> - ret = -EIO;
> -
> - blk_mq_complete_request(rq, ret);
> + cmd->ret = ret;
> + blk_mq_complete_request(cmd->rq, 0);
> }
>
> static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
> @@ -1686,8 +1681,10 @@ static void loop_handle_cmd(struct loop_cmd *cmd)
> ret = do_req_filebacked(lo, cmd->rq);
> failed:
> /* complete non-aio request */
> - if (!cmd->use_aio || ret)
> - blk_mq_complete_request(cmd->rq, ret ? -EIO : 0);
> + if (!cmd->use_aio || ret) {
> + cmd->ret = ret ? -EIO : 0;
> + blk_mq_complete_request(cmd->rq, 0);
> + }
> }
>
> static void loop_queue_work(struct kthread_work *work)
> @@ -1713,6 +1710,7 @@ static int loop_init_request(void *data, struct request *rq,
> static const struct blk_mq_ops loop_mq_ops = {
> .queue_rq = loop_queue_rq,
> .init_request = loop_init_request,
> + .complete = lo_complete_rq,
> };
>
> static int loop_add(struct loop_device **l, int i)
> diff --git a/drivers/block/loop.h b/drivers/block/loop.h
> index fb2237c73e61..fecd3f97ef8c 100644
> --- a/drivers/block/loop.h
> +++ b/drivers/block/loop.h
> @@ -70,6 +70,7 @@ struct loop_cmd {
> struct request *rq;
> struct list_head list;
> bool use_aio; /* use AIO interface to handle I/O */
> + long ret;
> struct kiocb iocb;
> };
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
next prev parent reply other threads:[~2017-04-12 10:24 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-06 15:39 kill req->errors Christoph Hellwig
2017-04-06 15:39 ` [PATCH 01/25] remove the mg_disk driver Christoph Hellwig
2017-04-13 19:58 ` Bart Van Assche
2017-04-14 8:21 ` hch
2017-04-06 15:39 ` [PATCH 02/25] block: remove the blk_execute_rq return value Christoph Hellwig
2017-04-06 18:38 ` Johannes Thumshirn
2017-04-13 20:03 ` Bart Van Assche
2017-04-14 8:22 ` hch
2017-04-17 16:01 ` Jens Axboe
2017-04-18 7:50 ` hch
2017-04-06 15:39 ` [PATCH 03/25] nvme-fc: fix status code handling in nvme_fc_fcpio_done Christoph Hellwig
2017-04-06 18:50 ` Johannes Thumshirn
2017-04-06 15:39 ` [PATCH 04/25] nvme: split nvme status from block req->errors Christoph Hellwig
2017-04-06 18:47 ` Johannes Thumshirn
2017-04-06 15:39 ` [PATCH 05/25] nvme: make nvme_error_status private Christoph Hellwig
2017-04-06 15:39 ` [PATCH 06/25] virtio: fix spelling of virtblk_scsi_request_done Christoph Hellwig
2017-04-06 18:53 ` Johannes Thumshirn
2017-04-13 20:05 ` Bart Van Assche
2017-04-06 15:39 ` [PATCH 07/25] virtio_blk: don't use req->errors Christoph Hellwig
2017-04-06 18:55 ` Johannes Thumshirn
2017-04-06 15:39 ` [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests Christoph Hellwig
2017-04-13 20:41 ` Bart Van Assche
2017-04-06 15:39 ` [PATCH 09/25] scsi: introduce a new result field in struct scsi_request Christoph Hellwig
2017-04-06 15:39 ` [PATCH 10/25] loop: zero-fill bio on the submitting cpu Christoph Hellwig
2017-04-12 10:24 ` Ming Lei [this message]
2017-04-06 15:39 ` [PATCH 11/25] null_blk: don't pass always-0 req->errors to blk_mq_complete_request Christoph Hellwig
2017-04-06 15:39 ` [PATCH 12/25] dm rq: don't pass irrelevant error code " Christoph Hellwig
2017-04-06 15:39 ` [PATCH 13/25] dm mpath: don't check for req->errors Christoph Hellwig
2017-04-06 15:39 ` [PATCH 14/25] nbd: don't use req->errors Christoph Hellwig
2017-04-06 21:11 ` Josef Bacik
2017-04-06 15:39 ` [PATCH 15/25] mtip32xx: add a status field to struct mtip_cmd Christoph Hellwig
2017-04-06 15:39 ` [PATCH 16/25] xen-blkfront: don't use req->errors Christoph Hellwig
2017-04-18 15:00 ` Roger Pau Monné
2017-04-18 15:05 ` Konrad Rzeszutek Wilk
2017-04-06 15:39 ` [PATCH 17/25] blk-mq: remove the error argument to blk_mq_complete_request Christoph Hellwig
2017-04-18 15:03 ` Roger Pau Monné
2017-04-18 15:06 ` Konrad Rzeszutek Wilk
2017-04-06 15:39 ` [PATCH 18/25] blk-mq: simplify __blk_mq_complete_request Christoph Hellwig
2017-04-06 15:39 ` [PATCH 19/25] block: add a error_count field to struct request Christoph Hellwig
2017-04-06 15:39 ` [PATCH 20/25] floppy: switch from req->errors to req->error_count Christoph Hellwig
2017-04-06 15:39 ` [PATCH 21/25] ataflop: " Christoph Hellwig
2017-04-06 15:39 ` [PATCH 22/25] swim3: remove (commented out) printing of req->errors Christoph Hellwig
2017-04-06 15:39 ` [PATCH 23/25] pd: remove bogus check for req->errors Christoph Hellwig
2017-04-06 15:39 ` [PATCH 24/25] blktrace: remove the unused block_rq_abort tracepoint Christoph Hellwig
2017-04-06 15:39 ` [PATCH 25/25] block: remove the errors field from struct request Christoph Hellwig
2017-04-06 20:00 ` kill req->errors Konrad Rzeszutek Wilk
2017-04-07 7:11 ` Christoph Hellwig
2017-04-18 14:33 ` Konrad Rzeszutek Wilk
2017-04-12 8:37 ` Christoph Hellwig
2017-04-12 8:38 ` 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=20170412102434.GB8835@ming.t460p \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=dm-devel@redhat.com \
--cc=hch@lst.de \
--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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox