qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 4/4] qemu-img: conditionally discard target on c


From: Peter Lieven
Subject: Re: [Qemu-devel] [PATCH 4/4] qemu-img: conditionally discard target on convert
Date: Thu, 18 Jul 2013 15:29:52 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7

On 18.07.2013 14:31, Paolo Bonzini wrote:
Il 18/07/2013 13:04, Peter Lieven ha scritto:
But if you set BDRV_DISCARD_WRITE_ZEROES, then you always need a
fallback to bdrv_write_zeroes.  Why not just call bdrv_write_zeroes to
begin with?  That's why extending bdrv_write_zeroes is preferable.
In this case wo do not need a flag to the function at all. If the
driver sets bdi->write_zeroes_w_discard = 1 then bdrv_write_zeroes
can use bdrv_discard to write zeroes and the driver has to
ensure that all is zero afterwards.
Peter, you removed exactly the part of the email where I explained the
wrong part of your reasoning:

    you cannot do that [discard in bdrv_write_zeroes] unconditionally.
    Some operations can use it, some cannot.  Think of SCSI disk
    emulation: it must not discard is WRITE SAME is sent without the
    UNMAP bit!

If the driver would have a better method of writing zeroes than
discard it simply should not set bdi->write_zeroes_w_discard = 1.
If the driver had a better method of writing zeroes than discard, it
simply should ignore the BDRV_MAY_UNMAP (or BDRV_MAY_DISCARD) flag in
its bdrv_write_zeros implementation.
ok, but this would require an individual patch in every driver, wouldn't it.
i am ok with that.

the BDRV_MAY_DISCARD flag is at the end a hint if the driver can optimize
writing zeroes by a discard or if real zeroes should be written e.g. to
sanitize the device?

talking for iscsi:
bdrv->discard can remain to use UNMAP and silently fail if lbpu == 0.
bdrv->write_zeroes will use writesame16 and set the unmap flag only if 
BDRV_MAY_DISCARD == 1 and BDRV_O_UNMAP == 1 and lbprz == 1.
in case lbpws == 0 it will return -ENOSUP.

Correct?

Peter




reply via email to

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