qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [Qemu-devel] [PATCH v5 13/14] nbd: Implement NBD_CMD_WR


From: Fam Zheng
Subject: Re: [Qemu-block] [Qemu-devel] [PATCH v5 13/14] nbd: Implement NBD_CMD_WRITE_ZEROES on server
Date: Wed, 20 Jul 2016 11:34:02 +0800
User-agent: Mutt/1.6.1 (2016-04-27)

On Tue, 07/19 17:45, Paolo Bonzini wrote:
> 
> 
> On 19/07/2016 17:28, Eric Blake wrote:
> >> If I'm reading the NBD proto.md correctly, this is not enough if
> >> NBD_CMD_FLAG_NO_HOLE is specified. We probably need to use a zeroed buffer 
> >> with
> >> blk_pwrite, or pass a new flag (BDRV_RED_NO_HOLE) to blk_pwrite_zeroes to
> >> enforce the bdrv_driver_pwritev() branch in bdrv_co_do_pwrite_zeroes().
> 
> I agree with Eric's interpretation.  It's a bit weird to have the
> direction inverted, but I'm not sure I see the ambiguity.  Can you explain?

Write zeroes _means_ "punch hole" on a raw file.

In block/raw-posix.c:handle_aiocb_write_zeroes():
> #ifdef CONFIG_FALLOCATE_PUNCH_HOLE
>     if (s->has_discard && s->has_fallocate) {
>         int ret = do_fallocate(s->fd,
>                                FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
>                                aiocb->aio_offset, aiocb->aio_nbytes);
>         if (ret == 0) {
>             ret = do_fallocate(s->fd, 0, aiocb->aio_offset, 
> aiocb->aio_nbytes);
>             if (ret == 0 || ret != -ENOTSUP) {
>                 return ret;
>             }
>             s->has_fallocate = false;
>         } else if (ret != -ENOTSUP) {
>             return ret;
>         } else {
>             s->has_discard = false;
>         }
>     }
> #endif

And unmap is translated to "punch hole", too.

In block/raw-posix.c:handle_aiocb_discard():
> #ifdef CONFIG_FALLOCATE_PUNCH_HOLE
>         ret = do_fallocate(s->fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
>                            aiocb->aio_offset, aiocb->aio_nbytes);
> #endif

So I agree that NBD_CMD_FLAG_NO_HOLE is a poorly named flag, because there is
always going to be a hole event if it's set.

Fam



reply via email to

[Prev in Thread] Current Thread [Next in Thread]