public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
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

  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