[Devel] [PATCH 1/3] ploop: skip redundant fsync for REQ_FUA in post_submit

Maxim Patlasov mpatlasov at virtuozzo.com
Wed Jun 22 12:26:11 PDT 2016


Kostya,

The patch is OK per-se, please commit it with:

Acked-by: Maxim Patlasov <mpatlasov at virtuozzo.com>

Thanks,
Maxim

On 06/21/2016 06:55 AM, Dmitry Monakhov wrote:
> Signed-off-by: Dmitry Monakhov <dmonakhov at openvz.org>
> ---
>   drivers/block/ploop/io_direct.c | 24 ++++++++++++++----------
>   1 file changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/block/ploop/io_direct.c b/drivers/block/ploop/io_direct.c
> index b844a80..58d7580 100644
> --- a/drivers/block/ploop/io_direct.c
> +++ b/drivers/block/ploop/io_direct.c
> @@ -517,27 +517,31 @@ dio_post_submit(struct ploop_io *io, struct ploop_request * preq)
>   	struct ploop_device *plo = preq->plo;
>   	sector_t sec = (sector_t)preq->iblock << preq->plo->cluster_log;
>   	loff_t clu_siz = 1 << (preq->plo->cluster_log + 9);
> +	int force_sync = preq->req_rw & REQ_FUA;
>   	int err;
>   
>   	file_start_write(io->files.file);
>   
> -	/* Here io->io_count is even ... */
> -	spin_lock_irq(&plo->lock);
> -	io->io_count++;
> -	set_bit(PLOOP_IO_FSYNC_DELAYED, &io->io_state);
> -	spin_unlock_irq(&plo->lock);
> -
> +	if (!force_sync) {
> +		/* Here io->io_count is even ... */
> +		spin_lock_irq(&plo->lock);
> +		io->io_count++;
> +		set_bit(PLOOP_IO_FSYNC_DELAYED, &io->io_state);
> +		spin_unlock_irq(&plo->lock);
> +	}
>   	err = io->files.file->f_op->fallocate(io->files.file,
>   					      FALLOC_FL_CONVERT_UNWRITTEN,
>   					      (loff_t)sec << 9, clu_siz);
>   
>   	/* highly unlikely case: FUA coming to a block not provisioned yet */
> -	if (!err && (preq->req_rw & REQ_FUA))
> +	if (!err && force_sync)
>   		err = io->ops->sync(io);
>   
> -	spin_lock_irq(&plo->lock);
> -	io->io_count++;
> -	spin_unlock_irq(&plo->lock);
> +	if (!force_sync) {
> +		spin_lock_irq(&plo->lock);
> +		io->io_count++;
> +		spin_unlock_irq(&plo->lock);
> +	}
>   	/* and here io->io_count is even (+2) again. */
>   
>   	file_end_write(io->files.file);



More information about the Devel mailing list