Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Yong Huang
On Wed, Feb 28, 2024 at 7:58 PM Kevin Wolf  wrote:

> Am 28.02.2024 um 12:30 hat Daniel P. Berrangé geschrieben:
> > On Wed, Feb 28, 2024 at 11:17:37AM +0100, Kevin Wolf wrote:
> > > Until now, @size has been mandatory for creating images with every
> > > driver. Maybe we should even have put it into BlockdevCreateOptions's
> > > base, because without a size, you're not really creating an image.
> >
> > NB, @size isn't mandatory for creating images. It isn't required
> > when creating qcow2 files with backing stores, as the size is
> > acquired from the backing file instead.
> >
> > $ qemu-img create demo.raw 1g
> > Formatting 'demo.raw', fmt=raw size=1073741824
> > $ qemu-img create -o backing_file=demo.raw -o backing_fmt=raw -f qcow2
> demo.qcow2
> > Formatting 'demo.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off
> compression_type=zlib size=1073741824 backing_file=demo.raw backing_fmt=raw
> lazy_refcounts=off refcount_bits=16
>
> Yes, 'qemu-img create' is different, it adds some convenience magic like
> this. But for 'blockdev-create', it's mandatory for every driver. I
> double checked the QAPI schema.
>
> Kevin
>
>
IMHO, LUKS detached header creation is not the case as qcow2 backing store
creation in
aspect of allowing @size absent, since qemu-img creation process fetch
the @size from
backing file as Daniel said above actually, while contrastively LUKS
detached header
creation with no need for @size. Making @size optional feels better for me.

Yong

-- 
Best regards


Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Kevin Wolf
Am 28.02.2024 um 12:30 hat Daniel P. Berrangé geschrieben:
> On Wed, Feb 28, 2024 at 11:17:37AM +0100, Kevin Wolf wrote:
> > Until now, @size has been mandatory for creating images with every
> > driver. Maybe we should even have put it into BlockdevCreateOptions's
> > base, because without a size, you're not really creating an image.
> 
> NB, @size isn't mandatory for creating images. It isn't required
> when creating qcow2 files with backing stores, as the size is
> acquired from the backing file instead.
> 
> $ qemu-img create demo.raw 1g
> Formatting 'demo.raw', fmt=raw size=1073741824
> $ qemu-img create -o backing_file=demo.raw -o backing_fmt=raw -f qcow2 
> demo.qcow2
> Formatting 'demo.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off 
> compression_type=zlib size=1073741824 backing_file=demo.raw backing_fmt=raw 
> lazy_refcounts=off refcount_bits=16

Yes, 'qemu-img create' is different, it adds some convenience magic like
this. But for 'blockdev-create', it's mandatory for every driver. I
double checked the QAPI schema.

Kevin




Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Daniel P . Berrangé
On Wed, Feb 28, 2024 at 11:17:37AM +0100, Kevin Wolf wrote:
> Until now, @size has been mandatory for creating images with every
> driver. Maybe we should even have put it into BlockdevCreateOptions's
> base, because without a size, you're not really creating an image.

NB, @size isn't mandatory for creating images. It isn't required
when creating qcow2 files with backing stores, as the size is
acquired from the backing file instead.

$ qemu-img create demo.raw 1g
Formatting 'demo.raw', fmt=raw size=1073741824
$ qemu-img create -o backing_file=demo.raw -o backing_fmt=raw -f qcow2 
demo.qcow2
Formatting 'demo.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off 
compression_type=zlib size=1073741824 backing_file=demo.raw backing_fmt=raw 
lazy_refcounts=off refcount_bits=16


With regards,
Daniel
-- 
|: https://berrange.com  -o-https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o-https://fstop138.berrange.com :|
|: https://entangle-photo.org-o-https://www.instagram.com/dberrange :|




Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Daniel P . Berrangé
On Wed, Feb 28, 2024 at 12:21:02PM +0100, Kevin Wolf wrote:
> Am 28.02.2024 um 11:23 hat Daniel P. Berrangé geschrieben:
> > On Wed, Feb 28, 2024 at 11:17:37AM +0100, Kevin Wolf wrote:
> > > Am 28.02.2024 um 07:43 hat Markus Armbruster geschrieben:
> > > > Yong Huang  writes:
> > > > 
> > > > > On Wed, Feb 21, 2024 at 4:26 PM Markus Armbruster  
> > > > > wrote:
> > > > >
> > > > >> Yong Huang  writes:
> > > > >>
> > > > >> > On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster 
> > > > >> > 
> > > > >> wrote:
> > > > >> >
> > > > >> >> Hyman Huang  writes:
> > > > >> >>
> > > > >> >> > Add comment in detail for commit 433957bb7f (qapi:
> > > > >> >> > Make parameter 'file' optional for
> > > > >> >> > BlockdevCreateOptionsLUKS).
> > > > >> >> >
> > > > >> >> > Signed-off-by: Hyman Huang 
> > > > >> >> > ---
> > > > >> >> >  qapi/block-core.json | 20 +++-
> > > > >> >> >  1 file changed, 19 insertions(+), 1 deletion(-)
> > > > >> >> >
> > > > >> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> > > > >> >> > index ab5a93a966..42b0840d43 100644
> > > > >> >> > --- a/qapi/block-core.json
> > > > >> >> > +++ b/qapi/block-core.json
> > > > >> >> > @@ -4973,7 +4973,25 @@
> > > > >> >> >  ##
> > > > >> >> >  # @BlockdevCreateOptionsLUKS:
> > > > >> >> >  #
> > > > >> >> > -# Driver specific image creation options for LUKS.
> > > > >> >> > +# Driver specific image creation options for LUKS. Note that
> > > > >> >> > +# @file is required if @preallocation is specified and equals
> > > > >> >> > +# PREALLOC_MODE_ON. The following three scenarios determine how
> > > > >> >> > +# creation logic behaves when @preallocation is either equal to
> > > > >> >> > +# PREALLOC_MODE_OFF or is not given:
> > > > >> >> > +#
> > > > >> >> > +#  1) When @file is given only, format the block device 
> > > > >> >> > referenced
> > > > >> >> > +# by @file as the LUKS specification and trunk it to the 
> > > > >> >> > @size.
> > > > >> >>
> > > > >> >> Do you mean "truncate it to @size"?
> > > > >> >>
> > > > >> > Yes, :( sorry for the spelling mistake.
> > > > >>
> > > > >> Writing good documentation in a second language is *hard*.  All we 
> > > > >> can
> > > > >> reasonably expect from contributors to try their best.  And then we
> > > > >> improve the text together in review.  Just like we do for code :)
> > > > >>
> > > > >> >> > +# In this case, the @size should reflect amount of space 
> > > > >> >> > made
> > > > >> >> > +# available to the guest, so the trunk size must take 
> > > > >> >> > account
> > > > >> >> > +# of that which will be used by the crypto header.
> > > > >> >> > +#
> > > > >> >> > +#  2) When @header is given only, just format the block device
> > > > >> >> > +# referenced by @header as the LUKS specification.
> > > > >> >> > +#
> > > > >> >> > +#  3) When both @file and @header are given, block device
> > > > >> >> > +# referenced by @file should be trunked to @size, and block
> > > > >> >> > +# device referenced by @header should be formatted as the 
> > > > >> >> > LUKS
> > > > >> >> > +# specification.
> > > > >> >> >  #
> > > > >> >> >  # @file: Node to create the image format on, mandatory except 
> > > > >> >> > when
> > > > >> >> >  #'preallocation' is not requested
> > > > >> >>
> > > > >> >> Let's see whether I understand.
> > > > >> >>
> > > > >> >> blockdev-create with "driver": "luks" can work in three different 
> > > > >> >> ways:
> > > > >> >>
> > > > >> >> 1. Create an image with a LUKS header
> > > > >> >>
> > > > >> >> 2. Create just a detached LUKS header
> > > > >> >>
> > > > >> >> 3. Create an image and a detached LUKS header
> > > > >> >>
> > > > >> >> Correct?
> > > > >> >>
> > > > >> >
> > > > >> > Yes
> > > > >> >
> > > > >> >
> > > > >> >> @file and @header are BlockdevRef, which means they refer to 
> > > > >> >> existing
> > > > >> >> images with arbitrary driver.  Could be "file", "qcow2", or 
> > > > >> >> anything.
> > > > >> >>
> > > > >> >> Correct?
> > > > >> >>
> > > > >> > Yes
> > > > >> >
> > > > >> >
> > > > >> >>
> > > > >> >> To get 1., specify @file, but not @header.
> > > > >> >>
> > > > >> >> To get 2., specify @header, but not @file.
> > > > >> >>
> > > > >> >> To get 3., specify both.
> > > > >> >>
> > > > >> >> Specifying neither is an error.
> > > > >> >>
> > > > >> >> Correct?
> > > > >> >>
> > > > >> >
> > > > >> > Yes
> > > > >> >
> > > > >> >
> > > > >> >> In any case, @size is the logical size of the image (how much 
> > > > >> >> data it
> > > > >> >> can hold).
> > > > >> >>
> > > > >> >
> > > > >> > Yes
> > > > >> >
> > > > >> >
> > > > >> >>
> > > > >> >> With 1., the actual image size is a bit larger due to the LUKS 
> > > > >> >> header.
> > > > >> >> The @file image is resized to that size: if it's shorter, it's 
> > > > >> >> grown, if
> > > > >> >> it's longer, it's truncated.
> > > > >> >>
> > > > >> >
> > > > >> > Yes
> > > > >> >
> > > > >> >
> > > > >> >> With 2., @size is 

Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Kevin Wolf
Am 28.02.2024 um 11:23 hat Daniel P. Berrangé geschrieben:
> On Wed, Feb 28, 2024 at 11:17:37AM +0100, Kevin Wolf wrote:
> > Am 28.02.2024 um 07:43 hat Markus Armbruster geschrieben:
> > > Yong Huang  writes:
> > > 
> > > > On Wed, Feb 21, 2024 at 4:26 PM Markus Armbruster  
> > > > wrote:
> > > >
> > > >> Yong Huang  writes:
> > > >>
> > > >> > On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster 
> > > >> wrote:
> > > >> >
> > > >> >> Hyman Huang  writes:
> > > >> >>
> > > >> >> > Add comment in detail for commit 433957bb7f (qapi:
> > > >> >> > Make parameter 'file' optional for
> > > >> >> > BlockdevCreateOptionsLUKS).
> > > >> >> >
> > > >> >> > Signed-off-by: Hyman Huang 
> > > >> >> > ---
> > > >> >> >  qapi/block-core.json | 20 +++-
> > > >> >> >  1 file changed, 19 insertions(+), 1 deletion(-)
> > > >> >> >
> > > >> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> > > >> >> > index ab5a93a966..42b0840d43 100644
> > > >> >> > --- a/qapi/block-core.json
> > > >> >> > +++ b/qapi/block-core.json
> > > >> >> > @@ -4973,7 +4973,25 @@
> > > >> >> >  ##
> > > >> >> >  # @BlockdevCreateOptionsLUKS:
> > > >> >> >  #
> > > >> >> > -# Driver specific image creation options for LUKS.
> > > >> >> > +# Driver specific image creation options for LUKS. Note that
> > > >> >> > +# @file is required if @preallocation is specified and equals
> > > >> >> > +# PREALLOC_MODE_ON. The following three scenarios determine how
> > > >> >> > +# creation logic behaves when @preallocation is either equal to
> > > >> >> > +# PREALLOC_MODE_OFF or is not given:
> > > >> >> > +#
> > > >> >> > +#  1) When @file is given only, format the block device 
> > > >> >> > referenced
> > > >> >> > +# by @file as the LUKS specification and trunk it to the 
> > > >> >> > @size.
> > > >> >>
> > > >> >> Do you mean "truncate it to @size"?
> > > >> >>
> > > >> > Yes, :( sorry for the spelling mistake.
> > > >>
> > > >> Writing good documentation in a second language is *hard*.  All we can
> > > >> reasonably expect from contributors to try their best.  And then we
> > > >> improve the text together in review.  Just like we do for code :)
> > > >>
> > > >> >> > +# In this case, the @size should reflect amount of space made
> > > >> >> > +# available to the guest, so the trunk size must take account
> > > >> >> > +# of that which will be used by the crypto header.
> > > >> >> > +#
> > > >> >> > +#  2) When @header is given only, just format the block device
> > > >> >> > +# referenced by @header as the LUKS specification.
> > > >> >> > +#
> > > >> >> > +#  3) When both @file and @header are given, block device
> > > >> >> > +# referenced by @file should be trunked to @size, and block
> > > >> >> > +# device referenced by @header should be formatted as the 
> > > >> >> > LUKS
> > > >> >> > +# specification.
> > > >> >> >  #
> > > >> >> >  # @file: Node to create the image format on, mandatory except 
> > > >> >> > when
> > > >> >> >  #'preallocation' is not requested
> > > >> >>
> > > >> >> Let's see whether I understand.
> > > >> >>
> > > >> >> blockdev-create with "driver": "luks" can work in three different 
> > > >> >> ways:
> > > >> >>
> > > >> >> 1. Create an image with a LUKS header
> > > >> >>
> > > >> >> 2. Create just a detached LUKS header
> > > >> >>
> > > >> >> 3. Create an image and a detached LUKS header
> > > >> >>
> > > >> >> Correct?
> > > >> >>
> > > >> >
> > > >> > Yes
> > > >> >
> > > >> >
> > > >> >> @file and @header are BlockdevRef, which means they refer to 
> > > >> >> existing
> > > >> >> images with arbitrary driver.  Could be "file", "qcow2", or 
> > > >> >> anything.
> > > >> >>
> > > >> >> Correct?
> > > >> >>
> > > >> > Yes
> > > >> >
> > > >> >
> > > >> >>
> > > >> >> To get 1., specify @file, but not @header.
> > > >> >>
> > > >> >> To get 2., specify @header, but not @file.
> > > >> >>
> > > >> >> To get 3., specify both.
> > > >> >>
> > > >> >> Specifying neither is an error.
> > > >> >>
> > > >> >> Correct?
> > > >> >>
> > > >> >
> > > >> > Yes
> > > >> >
> > > >> >
> > > >> >> In any case, @size is the logical size of the image (how much data 
> > > >> >> it
> > > >> >> can hold).
> > > >> >>
> > > >> >
> > > >> > Yes
> > > >> >
> > > >> >
> > > >> >>
> > > >> >> With 1., the actual image size is a bit larger due to the LUKS 
> > > >> >> header.
> > > >> >> The @file image is resized to that size: if it's shorter, it's 
> > > >> >> grown, if
> > > >> >> it's longer, it's truncated.
> > > >> >>
> > > >> >
> > > >> > Yes
> > > >> >
> > > >> >
> > > >> >> With 2., @size is merely recorded in the detached LUKS header.
> > > >> >>
> > > >> >
> > > >> > In LUKS1 specification, payload data size is not contained in the 
> > > >> > header,
> > > >> > so in this case, @size is not recorded in the detached LUKS header.
> > > >> > The creation logic just does the LUKS header formatting only.
> > > >>
> > > >> Is @size unused then?
> > > >>
> > > >
> > > > 

Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Daniel P . Berrangé
On Wed, Feb 28, 2024 at 11:17:37AM +0100, Kevin Wolf wrote:
> Am 28.02.2024 um 07:43 hat Markus Armbruster geschrieben:
> > Yong Huang  writes:
> > 
> > > On Wed, Feb 21, 2024 at 4:26 PM Markus Armbruster  
> > > wrote:
> > >
> > >> Yong Huang  writes:
> > >>
> > >> > On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster 
> > >> wrote:
> > >> >
> > >> >> Hyman Huang  writes:
> > >> >>
> > >> >> > Add comment in detail for commit 433957bb7f (qapi:
> > >> >> > Make parameter 'file' optional for
> > >> >> > BlockdevCreateOptionsLUKS).
> > >> >> >
> > >> >> > Signed-off-by: Hyman Huang 
> > >> >> > ---
> > >> >> >  qapi/block-core.json | 20 +++-
> > >> >> >  1 file changed, 19 insertions(+), 1 deletion(-)
> > >> >> >
> > >> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> > >> >> > index ab5a93a966..42b0840d43 100644
> > >> >> > --- a/qapi/block-core.json
> > >> >> > +++ b/qapi/block-core.json
> > >> >> > @@ -4973,7 +4973,25 @@
> > >> >> >  ##
> > >> >> >  # @BlockdevCreateOptionsLUKS:
> > >> >> >  #
> > >> >> > -# Driver specific image creation options for LUKS.
> > >> >> > +# Driver specific image creation options for LUKS. Note that
> > >> >> > +# @file is required if @preallocation is specified and equals
> > >> >> > +# PREALLOC_MODE_ON. The following three scenarios determine how
> > >> >> > +# creation logic behaves when @preallocation is either equal to
> > >> >> > +# PREALLOC_MODE_OFF or is not given:
> > >> >> > +#
> > >> >> > +#  1) When @file is given only, format the block device referenced
> > >> >> > +# by @file as the LUKS specification and trunk it to the @size.
> > >> >>
> > >> >> Do you mean "truncate it to @size"?
> > >> >>
> > >> > Yes, :( sorry for the spelling mistake.
> > >>
> > >> Writing good documentation in a second language is *hard*.  All we can
> > >> reasonably expect from contributors to try their best.  And then we
> > >> improve the text together in review.  Just like we do for code :)
> > >>
> > >> >> > +# In this case, the @size should reflect amount of space made
> > >> >> > +# available to the guest, so the trunk size must take account
> > >> >> > +# of that which will be used by the crypto header.
> > >> >> > +#
> > >> >> > +#  2) When @header is given only, just format the block device
> > >> >> > +# referenced by @header as the LUKS specification.
> > >> >> > +#
> > >> >> > +#  3) When both @file and @header are given, block device
> > >> >> > +# referenced by @file should be trunked to @size, and block
> > >> >> > +# device referenced by @header should be formatted as the LUKS
> > >> >> > +# specification.
> > >> >> >  #
> > >> >> >  # @file: Node to create the image format on, mandatory except when
> > >> >> >  #'preallocation' is not requested
> > >> >>
> > >> >> Let's see whether I understand.
> > >> >>
> > >> >> blockdev-create with "driver": "luks" can work in three different 
> > >> >> ways:
> > >> >>
> > >> >> 1. Create an image with a LUKS header
> > >> >>
> > >> >> 2. Create just a detached LUKS header
> > >> >>
> > >> >> 3. Create an image and a detached LUKS header
> > >> >>
> > >> >> Correct?
> > >> >>
> > >> >
> > >> > Yes
> > >> >
> > >> >
> > >> >> @file and @header are BlockdevRef, which means they refer to existing
> > >> >> images with arbitrary driver.  Could be "file", "qcow2", or anything.
> > >> >>
> > >> >> Correct?
> > >> >>
> > >> > Yes
> > >> >
> > >> >
> > >> >>
> > >> >> To get 1., specify @file, but not @header.
> > >> >>
> > >> >> To get 2., specify @header, but not @file.
> > >> >>
> > >> >> To get 3., specify both.
> > >> >>
> > >> >> Specifying neither is an error.
> > >> >>
> > >> >> Correct?
> > >> >>
> > >> >
> > >> > Yes
> > >> >
> > >> >
> > >> >> In any case, @size is the logical size of the image (how much data it
> > >> >> can hold).
> > >> >>
> > >> >
> > >> > Yes
> > >> >
> > >> >
> > >> >>
> > >> >> With 1., the actual image size is a bit larger due to the LUKS header.
> > >> >> The @file image is resized to that size: if it's shorter, it's grown, 
> > >> >> if
> > >> >> it's longer, it's truncated.
> > >> >>
> > >> >
> > >> > Yes
> > >> >
> > >> >
> > >> >> With 2., @size is merely recorded in the detached LUKS header.
> > >> >>
> > >> >
> > >> > In LUKS1 specification, payload data size is not contained in the 
> > >> > header,
> > >> > so in this case, @size is not recorded in the detached LUKS header.
> > >> > The creation logic just does the LUKS header formatting only.
> > >>
> > >> Is @size unused then?
> > >>
> > >
> > > IIUC, yes. Creation logic will ignore the @size. See the following code
> > > in function block_crypto_co_create_luks:
> > >
> > > if (luks_opts->header) {
> > > /* LUKS volume with detached header */
> > > hdr_bs = bdrv_co_open_blockdev_ref(luks_opts->header, errp);
> > > if (hdr_bs == NULL) {
> > > return -EIO;
> > > }
> > >
> > > cflags |= QCRYPTO_BLOCK_CREATE_DETACHED;
> > >

Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-28 Thread Kevin Wolf
Am 28.02.2024 um 07:43 hat Markus Armbruster geschrieben:
> Yong Huang  writes:
> 
> > On Wed, Feb 21, 2024 at 4:26 PM Markus Armbruster  wrote:
> >
> >> Yong Huang  writes:
> >>
> >> > On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster 
> >> wrote:
> >> >
> >> >> Hyman Huang  writes:
> >> >>
> >> >> > Add comment in detail for commit 433957bb7f (qapi:
> >> >> > Make parameter 'file' optional for
> >> >> > BlockdevCreateOptionsLUKS).
> >> >> >
> >> >> > Signed-off-by: Hyman Huang 
> >> >> > ---
> >> >> >  qapi/block-core.json | 20 +++-
> >> >> >  1 file changed, 19 insertions(+), 1 deletion(-)
> >> >> >
> >> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> >> >> > index ab5a93a966..42b0840d43 100644
> >> >> > --- a/qapi/block-core.json
> >> >> > +++ b/qapi/block-core.json
> >> >> > @@ -4973,7 +4973,25 @@
> >> >> >  ##
> >> >> >  # @BlockdevCreateOptionsLUKS:
> >> >> >  #
> >> >> > -# Driver specific image creation options for LUKS.
> >> >> > +# Driver specific image creation options for LUKS. Note that
> >> >> > +# @file is required if @preallocation is specified and equals
> >> >> > +# PREALLOC_MODE_ON. The following three scenarios determine how
> >> >> > +# creation logic behaves when @preallocation is either equal to
> >> >> > +# PREALLOC_MODE_OFF or is not given:
> >> >> > +#
> >> >> > +#  1) When @file is given only, format the block device referenced
> >> >> > +# by @file as the LUKS specification and trunk it to the @size.
> >> >>
> >> >> Do you mean "truncate it to @size"?
> >> >>
> >> > Yes, :( sorry for the spelling mistake.
> >>
> >> Writing good documentation in a second language is *hard*.  All we can
> >> reasonably expect from contributors to try their best.  And then we
> >> improve the text together in review.  Just like we do for code :)
> >>
> >> >> > +# In this case, the @size should reflect amount of space made
> >> >> > +# available to the guest, so the trunk size must take account
> >> >> > +# of that which will be used by the crypto header.
> >> >> > +#
> >> >> > +#  2) When @header is given only, just format the block device
> >> >> > +# referenced by @header as the LUKS specification.
> >> >> > +#
> >> >> > +#  3) When both @file and @header are given, block device
> >> >> > +# referenced by @file should be trunked to @size, and block
> >> >> > +# device referenced by @header should be formatted as the LUKS
> >> >> > +# specification.
> >> >> >  #
> >> >> >  # @file: Node to create the image format on, mandatory except when
> >> >> >  #'preallocation' is not requested
> >> >>
> >> >> Let's see whether I understand.
> >> >>
> >> >> blockdev-create with "driver": "luks" can work in three different ways:
> >> >>
> >> >> 1. Create an image with a LUKS header
> >> >>
> >> >> 2. Create just a detached LUKS header
> >> >>
> >> >> 3. Create an image and a detached LUKS header
> >> >>
> >> >> Correct?
> >> >>
> >> >
> >> > Yes
> >> >
> >> >
> >> >> @file and @header are BlockdevRef, which means they refer to existing
> >> >> images with arbitrary driver.  Could be "file", "qcow2", or anything.
> >> >>
> >> >> Correct?
> >> >>
> >> > Yes
> >> >
> >> >
> >> >>
> >> >> To get 1., specify @file, but not @header.
> >> >>
> >> >> To get 2., specify @header, but not @file.
> >> >>
> >> >> To get 3., specify both.
> >> >>
> >> >> Specifying neither is an error.
> >> >>
> >> >> Correct?
> >> >>
> >> >
> >> > Yes
> >> >
> >> >
> >> >> In any case, @size is the logical size of the image (how much data it
> >> >> can hold).
> >> >>
> >> >
> >> > Yes
> >> >
> >> >
> >> >>
> >> >> With 1., the actual image size is a bit larger due to the LUKS header.
> >> >> The @file image is resized to that size: if it's shorter, it's grown, if
> >> >> it's longer, it's truncated.
> >> >>
> >> >
> >> > Yes
> >> >
> >> >
> >> >> With 2., @size is merely recorded in the detached LUKS header.
> >> >>
> >> >
> >> > In LUKS1 specification, payload data size is not contained in the header,
> >> > so in this case, @size is not recorded in the detached LUKS header.
> >> > The creation logic just does the LUKS header formatting only.
> >>
> >> Is @size unused then?
> >>
> >
> > IIUC, yes. Creation logic will ignore the @size. See the following code
> > in function block_crypto_co_create_luks:
> >
> > if (luks_opts->header) {
> > /* LUKS volume with detached header */
> > hdr_bs = bdrv_co_open_blockdev_ref(luks_opts->header, errp);
> > if (hdr_bs == NULL) {
> > return -EIO;
> > }
> >
> > cflags |= QCRYPTO_BLOCK_CREATE_DETACHED;
> >
> > /* Format the LUKS header node, here just ignore the size
> >   * and passed zero to block_crypto_co_create_generic */
> > ret = block_crypto_co_create_generic(hdr_bs, 0, _opts,
> >  PREALLOC_MODE_OFF, cflags, 
> > errp);
> > if (ret < 0) {
> > goto fail;
> > }
> >
> > 

Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-27 Thread Markus Armbruster
Yong Huang  writes:

> On Wed, Feb 21, 2024 at 4:26 PM Markus Armbruster  wrote:
>
>> Yong Huang  writes:
>>
>> > On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster 
>> wrote:
>> >
>> >> Hyman Huang  writes:
>> >>
>> >> > Add comment in detail for commit 433957bb7f (qapi:
>> >> > Make parameter 'file' optional for
>> >> > BlockdevCreateOptionsLUKS).
>> >> >
>> >> > Signed-off-by: Hyman Huang 
>> >> > ---
>> >> >  qapi/block-core.json | 20 +++-
>> >> >  1 file changed, 19 insertions(+), 1 deletion(-)
>> >> >
>> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
>> >> > index ab5a93a966..42b0840d43 100644
>> >> > --- a/qapi/block-core.json
>> >> > +++ b/qapi/block-core.json
>> >> > @@ -4973,7 +4973,25 @@
>> >> >  ##
>> >> >  # @BlockdevCreateOptionsLUKS:
>> >> >  #
>> >> > -# Driver specific image creation options for LUKS.
>> >> > +# Driver specific image creation options for LUKS. Note that
>> >> > +# @file is required if @preallocation is specified and equals
>> >> > +# PREALLOC_MODE_ON. The following three scenarios determine how
>> >> > +# creation logic behaves when @preallocation is either equal to
>> >> > +# PREALLOC_MODE_OFF or is not given:
>> >> > +#
>> >> > +#  1) When @file is given only, format the block device referenced
>> >> > +# by @file as the LUKS specification and trunk it to the @size.
>> >>
>> >> Do you mean "truncate it to @size"?
>> >>
>> > Yes, :( sorry for the spelling mistake.
>>
>> Writing good documentation in a second language is *hard*.  All we can
>> reasonably expect from contributors to try their best.  And then we
>> improve the text together in review.  Just like we do for code :)
>>
>> >> > +# In this case, the @size should reflect amount of space made
>> >> > +# available to the guest, so the trunk size must take account
>> >> > +# of that which will be used by the crypto header.
>> >> > +#
>> >> > +#  2) When @header is given only, just format the block device
>> >> > +# referenced by @header as the LUKS specification.
>> >> > +#
>> >> > +#  3) When both @file and @header are given, block device
>> >> > +# referenced by @file should be trunked to @size, and block
>> >> > +# device referenced by @header should be formatted as the LUKS
>> >> > +# specification.
>> >> >  #
>> >> >  # @file: Node to create the image format on, mandatory except when
>> >> >  #'preallocation' is not requested
>> >>
>> >> Let's see whether I understand.
>> >>
>> >> blockdev-create with "driver": "luks" can work in three different ways:
>> >>
>> >> 1. Create an image with a LUKS header
>> >>
>> >> 2. Create just a detached LUKS header
>> >>
>> >> 3. Create an image and a detached LUKS header
>> >>
>> >> Correct?
>> >>
>> >
>> > Yes
>> >
>> >
>> >> @file and @header are BlockdevRef, which means they refer to existing
>> >> images with arbitrary driver.  Could be "file", "qcow2", or anything.
>> >>
>> >> Correct?
>> >>
>> > Yes
>> >
>> >
>> >>
>> >> To get 1., specify @file, but not @header.
>> >>
>> >> To get 2., specify @header, but not @file.
>> >>
>> >> To get 3., specify both.
>> >>
>> >> Specifying neither is an error.
>> >>
>> >> Correct?
>> >>
>> >
>> > Yes
>> >
>> >
>> >> In any case, @size is the logical size of the image (how much data it
>> >> can hold).
>> >>
>> >
>> > Yes
>> >
>> >
>> >>
>> >> With 1., the actual image size is a bit larger due to the LUKS header.
>> >> The @file image is resized to that size: if it's shorter, it's grown, if
>> >> it's longer, it's truncated.
>> >>
>> >
>> > Yes
>> >
>> >
>> >> With 2., @size is merely recorded in the detached LUKS header.
>> >>
>> >
>> > In LUKS1 specification, payload data size is not contained in the header,
>> > so in this case, @size is not recorded in the detached LUKS header.
>> > The creation logic just does the LUKS header formatting only.
>>
>> Is @size unused then?
>>
>
> IIUC, yes. Creation logic will ignore the @size. See the following code
> in function block_crypto_co_create_luks:
>
> if (luks_opts->header) {
> /* LUKS volume with detached header */
> hdr_bs = bdrv_co_open_blockdev_ref(luks_opts->header, errp);
> if (hdr_bs == NULL) {
> return -EIO;
> }
>
> cflags |= QCRYPTO_BLOCK_CREATE_DETACHED;
>
> /* Format the LUKS header node, here just ignore the size
>   * and passed zero to block_crypto_co_create_generic */
> ret = block_crypto_co_create_generic(hdr_bs, 0, _opts,
>  PREALLOC_MODE_OFF, cflags, errp);
> if (ret < 0) {
> goto fail;
> }
>
> /* Format the LUKS payload node */
> if (luks_opts->file) {
> ret = block_crypto_co_format_luks_payload(luks_opts, errp);
> if (ret < 0) {
> goto fail;
> }
> }

@size is a required argument, but silently ignored when @header is
present and @file is absent (2. Create just a detached LUKS 

Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-21 Thread Yong Huang
On Wed, Feb 21, 2024 at 4:26 PM Markus Armbruster  wrote:

> Yong Huang  writes:
>
> > On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster 
> wrote:
> >
> >> Hyman Huang  writes:
> >>
> >> > Add comment in detail for commit 433957bb7f (qapi:
> >> > Make parameter 'file' optional for
> >> > BlockdevCreateOptionsLUKS).
> >> >
> >> > Signed-off-by: Hyman Huang 
> >> > ---
> >> >  qapi/block-core.json | 20 +++-
> >> >  1 file changed, 19 insertions(+), 1 deletion(-)
> >> >
> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> >> > index ab5a93a966..42b0840d43 100644
> >> > --- a/qapi/block-core.json
> >> > +++ b/qapi/block-core.json
> >> > @@ -4973,7 +4973,25 @@
> >> >  ##
> >> >  # @BlockdevCreateOptionsLUKS:
> >> >  #
> >> > -# Driver specific image creation options for LUKS.
> >> > +# Driver specific image creation options for LUKS. Note that
> >> > +# @file is required if @preallocation is specified and equals
> >> > +# PREALLOC_MODE_ON. The following three scenarios determine how
> >> > +# creation logic behaves when @preallocation is either equal to
> >> > +# PREALLOC_MODE_OFF or is not given:
> >> > +#
> >> > +#  1) When @file is given only, format the block device referenced
> >> > +# by @file as the LUKS specification and trunk it to the @size.
> >>
> >> Do you mean "truncate it to @size"?
> >>
> > Yes, :( sorry for the spelling mistake.
>
> Writing good documentation in a second language is *hard*.  All we can
> reasonably expect from contributors to try their best.  And then we
> improve the text together in review.  Just like we do for code :)
>
> >> > +# In this case, the @size should reflect amount of space made
> >> > +# available to the guest, so the trunk size must take account
> >> > +# of that which will be used by the crypto header.
> >> > +#
> >> > +#  2) When @header is given only, just format the block device
> >> > +# referenced by @header as the LUKS specification.
> >> > +#
> >> > +#  3) When both @file and @header are given, block device
> >> > +# referenced by @file should be trunked to @size, and block
> >> > +# device referenced by @header should be formatted as the LUKS
> >> > +# specification.
> >> >  #
> >> >  # @file: Node to create the image format on, mandatory except when
> >> >  #'preallocation' is not requested
> >>
> >> Let's see whether I understand.
> >>
> >> blockdev-create with "driver": "luks" can work in three different ways:
> >>
> >> 1. Create an image with a LUKS header
> >>
> >> 2. Create just a detached LUKS header
> >>
> >> 3. Create an image and a detached LUKS header
> >>
> >> Correct?
> >>
> >
> > Yes
> >
> >
> >> @file and @header are BlockdevRef, which means they refer to existing
> >> images with arbitrary driver.  Could be "file", "qcow2", or anything.
> >>
> >> Correct?
> >>
> > Yes
> >
> >
> >>
> >> To get 1., specify @file, but not @header.
> >>
> >> To get 2., specify @header, but not @file.
> >>
> >> To get 3., specify both.
> >>
> >> Specifying neither is an error.
> >>
> >> Correct?
> >>
> >
> > Yes
> >
> >
> >> In any case, @size is the logical size of the image (how much data it
> >> can hold).
> >>
> >
> > Yes
> >
> >
> >>
> >> With 1., the actual image size is a bit larger due to the LUKS header.
> >> The @file image is resized to that size: if it's shorter, it's grown, if
> >> it's longer, it's truncated.
> >>
> >
> > Yes
> >
> >
> >> With 2., @size is merely recorded in the detached LUKS header.
> >>
> >
> > In LUKS1 specification, payload data size is not contained in the header,
> > so in this case, @size is not recorded in the detached LUKS header.
> > The creation logic just does the LUKS header formatting only.
>
> Is @size unused then?
>

IIUC, yes. Creation logic will ignore the @size. See the following code
in function block_crypto_co_create_luks:

if (luks_opts->header) {
/* LUKS volume with detached header */
hdr_bs = bdrv_co_open_blockdev_ref(luks_opts->header, errp);
if (hdr_bs == NULL) {
return -EIO;
}

cflags |= QCRYPTO_BLOCK_CREATE_DETACHED;

/* Format the LUKS header node, here just ignore the size
  * and passed zero to block_crypto_co_create_generic */
ret = block_crypto_co_create_generic(hdr_bs, 0, _opts,
 PREALLOC_MODE_OFF, cflags,
errp);
if (ret < 0) {
goto fail;
}

/* Format the LUKS payload node */
if (luks_opts->file) {
ret = block_crypto_co_format_luks_payload(luks_opts, errp);
if (ret < 0) {
goto fail;
}
}


>
> >> With 3., @size is recorded in the detached LUKS header, and the @file
> >> image is resized as with 1.
> >>
> >
> > Same reason as above, @size is not recorded and @file image is
> > resized to @size exactly.
> >
> >
> >>
> >> Correct?
> >>
> >>
> > Thanks for the comment,
> >
> > Yong
>
>

-- 
Best regards


Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-21 Thread Markus Armbruster
Yong Huang  writes:

> On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster  wrote:
>
>> Hyman Huang  writes:
>>
>> > Add comment in detail for commit 433957bb7f (qapi:
>> > Make parameter 'file' optional for
>> > BlockdevCreateOptionsLUKS).
>> >
>> > Signed-off-by: Hyman Huang 
>> > ---
>> >  qapi/block-core.json | 20 +++-
>> >  1 file changed, 19 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/qapi/block-core.json b/qapi/block-core.json
>> > index ab5a93a966..42b0840d43 100644
>> > --- a/qapi/block-core.json
>> > +++ b/qapi/block-core.json
>> > @@ -4973,7 +4973,25 @@
>> >  ##
>> >  # @BlockdevCreateOptionsLUKS:
>> >  #
>> > -# Driver specific image creation options for LUKS.
>> > +# Driver specific image creation options for LUKS. Note that
>> > +# @file is required if @preallocation is specified and equals
>> > +# PREALLOC_MODE_ON. The following three scenarios determine how
>> > +# creation logic behaves when @preallocation is either equal to
>> > +# PREALLOC_MODE_OFF or is not given:
>> > +#
>> > +#  1) When @file is given only, format the block device referenced
>> > +# by @file as the LUKS specification and trunk it to the @size.
>>
>> Do you mean "truncate it to @size"?
>>
> Yes, :( sorry for the spelling mistake.

Writing good documentation in a second language is *hard*.  All we can
reasonably expect from contributors to try their best.  And then we
improve the text together in review.  Just like we do for code :)

>> > +# In this case, the @size should reflect amount of space made
>> > +# available to the guest, so the trunk size must take account
>> > +# of that which will be used by the crypto header.
>> > +#
>> > +#  2) When @header is given only, just format the block device
>> > +# referenced by @header as the LUKS specification.
>> > +#
>> > +#  3) When both @file and @header are given, block device
>> > +# referenced by @file should be trunked to @size, and block
>> > +# device referenced by @header should be formatted as the LUKS
>> > +# specification.
>> >  #
>> >  # @file: Node to create the image format on, mandatory except when
>> >  #'preallocation' is not requested
>>
>> Let's see whether I understand.
>>
>> blockdev-create with "driver": "luks" can work in three different ways:
>>
>> 1. Create an image with a LUKS header
>>
>> 2. Create just a detached LUKS header
>>
>> 3. Create an image and a detached LUKS header
>>
>> Correct?
>>
>
> Yes
>
>
>> @file and @header are BlockdevRef, which means they refer to existing
>> images with arbitrary driver.  Could be "file", "qcow2", or anything.
>>
>> Correct?
>>
> Yes
>
>
>>
>> To get 1., specify @file, but not @header.
>>
>> To get 2., specify @header, but not @file.
>>
>> To get 3., specify both.
>>
>> Specifying neither is an error.
>>
>> Correct?
>>
>
> Yes
>
>
>> In any case, @size is the logical size of the image (how much data it
>> can hold).
>>
>
> Yes
>
>
>>
>> With 1., the actual image size is a bit larger due to the LUKS header.
>> The @file image is resized to that size: if it's shorter, it's grown, if
>> it's longer, it's truncated.
>>
>
> Yes
>
>
>> With 2., @size is merely recorded in the detached LUKS header.
>>
>
> In LUKS1 specification, payload data size is not contained in the header,
> so in this case, @size is not recorded in the detached LUKS header.
> The creation logic just does the LUKS header formatting only.

Is @size unused then?

>> With 3., @size is recorded in the detached LUKS header, and the @file
>> image is resized as with 1.
>>
>
> Same reason as above, @size is not recorded and @file image is
> resized to @size exactly.
>
>
>>
>> Correct?
>>
>>
> Thanks for the comment,
>
> Yong




Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-20 Thread Yong Huang
On Wed, Feb 21, 2024 at 2:43 PM Markus Armbruster  wrote:

> Hyman Huang  writes:
>
> > Add comment in detail for commit 433957bb7f (qapi:
> > Make parameter 'file' optional for
> > BlockdevCreateOptionsLUKS).
> >
> > Signed-off-by: Hyman Huang 
> > ---
> >  qapi/block-core.json | 20 +++-
> >  1 file changed, 19 insertions(+), 1 deletion(-)
> >
> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> > index ab5a93a966..42b0840d43 100644
> > --- a/qapi/block-core.json
> > +++ b/qapi/block-core.json
> > @@ -4973,7 +4973,25 @@
> >  ##
> >  # @BlockdevCreateOptionsLUKS:
> >  #
> > -# Driver specific image creation options for LUKS.
> > +# Driver specific image creation options for LUKS. Note that
> > +# @file is required if @preallocation is specified and equals
> > +# PREALLOC_MODE_ON. The following three scenarios determine how
> > +# creation logic behaves when @preallocation is either equal to
> > +# PREALLOC_MODE_OFF or is not given:
> > +#
> > +#  1) When @file is given only, format the block device referenced
> > +# by @file as the LUKS specification and trunk it to the @size.
>
> Do you mean "truncate it to @size"?
>
Yes, :( sorry for the spelling mistake.


>
> > +# In this case, the @size should reflect amount of space made
> > +# available to the guest, so the trunk size must take account
> > +# of that which will be used by the crypto header.
> > +#
> > +#  2) When @header is given only, just format the block device
> > +# referenced by @header as the LUKS specification.
> > +#
> > +#  3) When both @file and @header are given, block device
> > +# referenced by @file should be trunked to @size, and block
> > +# device referenced by @header should be formatted as the LUKS
> > +# specification.
> >  #
> >  # @file: Node to create the image format on, mandatory except when
> >  #'preallocation' is not requested
>
> Let's see whether I understand.
>
> blockdev-create with "driver": "luks" can work in three different ways:
>
> 1. Create an image with a LUKS header
>
> 2. Create just a detached LUKS header
>
> 3. Create an image and a detached LUKS header
>
> Correct?
>

Yes


> @file and @header are BlockdevRef, which means they refer to existing
> images with arbitrary driver.  Could be "file", "qcow2", or anything.
>
> Correct?
>
Yes


>
> To get 1., specify @file, but not @header.
>
> To get 2., specify @header, but not @file.
>
> To get 3., specify both.
>
> Specifying neither is an error.
>
> Correct?
>

Yes


> In any case, @size is the logical size of the image (how much data it
> can hold).
>

Yes


>
> With 1., the actual image size is a bit larger due to the LUKS header.
> The @file image is resized to that size: if it's shorter, it's grown, if
> it's longer, it's truncated.
>

Yes


> With 2., @size is merely recorded in the detached LUKS header.
>

In LUKS1 specification, payload data size is not contained in the header,
so in this case, @size is not recorded in the detached LUKS header.
The creation logic just does the LUKS header formatting only.


>
> With 3., @size is recorded in the detached LUKS header, and the @file
> image is resized as with 1.
>

Same reason as above, @size is not recorded and @file image is
resized to @size exactly.


>
> Correct?
>
>
Thanks for the comment,

Yong

-- 
Best regards


Re: [PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-20 Thread Markus Armbruster
Hyman Huang  writes:

> Add comment in detail for commit 433957bb7f (qapi:
> Make parameter 'file' optional for
> BlockdevCreateOptionsLUKS).
>
> Signed-off-by: Hyman Huang 
> ---
>  qapi/block-core.json | 20 +++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index ab5a93a966..42b0840d43 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -4973,7 +4973,25 @@
>  ##
>  # @BlockdevCreateOptionsLUKS:
>  #
> -# Driver specific image creation options for LUKS.
> +# Driver specific image creation options for LUKS. Note that
> +# @file is required if @preallocation is specified and equals
> +# PREALLOC_MODE_ON. The following three scenarios determine how
> +# creation logic behaves when @preallocation is either equal to
> +# PREALLOC_MODE_OFF or is not given:
> +#
> +#  1) When @file is given only, format the block device referenced
> +# by @file as the LUKS specification and trunk it to the @size.

Do you mean "truncate it to @size"?

> +# In this case, the @size should reflect amount of space made
> +# available to the guest, so the trunk size must take account
> +# of that which will be used by the crypto header.
> +#
> +#  2) When @header is given only, just format the block device
> +# referenced by @header as the LUKS specification.
> +#
> +#  3) When both @file and @header are given, block device
> +# referenced by @file should be trunked to @size, and block
> +# device referenced by @header should be formatted as the LUKS
> +# specification.
>  #
>  # @file: Node to create the image format on, mandatory except when
>  #'preallocation' is not requested

Let's see whether I understand.

blockdev-create with "driver": "luks" can work in three different ways:

1. Create an image with a LUKS header

2. Create just a detached LUKS header

3. Create an image and a detached LUKS header

Correct?

@file and @header are BlockdevRef, which means they refer to existing
images with arbitrary driver.  Could be "file", "qcow2", or anything.

Correct?

To get 1., specify @file, but not @header.

To get 2., specify @header, but not @file.

To get 3., specify both.

Specifying neither is an error.

Correct?

In any case, @size is the logical size of the image (how much data it
can hold).

With 1., the actual image size is a bit larger due to the LUKS header.
The @file image is resized to that size: if it's shorter, it's grown, if
it's longer, it's truncated.

With 2., @size is merely recorded in the detached LUKS header.

With 3., @size is recorded in the detached LUKS header, and the @file
image is resized as with 1.

Correct?




[PATCH] qapi: Craft the BlockdevCreateOptionsLUKS comment

2024-02-20 Thread Hyman Huang
Add comment in detail for commit 433957bb7f (qapi:
Make parameter 'file' optional for
BlockdevCreateOptionsLUKS).

Signed-off-by: Hyman Huang 
---
 qapi/block-core.json | 20 +++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/qapi/block-core.json b/qapi/block-core.json
index ab5a93a966..42b0840d43 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -4973,7 +4973,25 @@
 ##
 # @BlockdevCreateOptionsLUKS:
 #
-# Driver specific image creation options for LUKS.
+# Driver specific image creation options for LUKS. Note that
+# @file is required if @preallocation is specified and equals
+# PREALLOC_MODE_ON. The following three scenarios determine how
+# creation logic behaves when @preallocation is either equal to
+# PREALLOC_MODE_OFF or is not given:
+#
+#  1) When @file is given only, format the block device referenced
+# by @file as the LUKS specification and trunk it to the @size.
+# In this case, the @size should reflect amount of space made
+# available to the guest, so the trunk size must take account
+# of that which will be used by the crypto header.
+#
+#  2) When @header is given only, just format the block device
+# referenced by @header as the LUKS specification.
+#
+#  3) When both @file and @header are given, block device
+# referenced by @file should be trunked to @size, and block
+# device referenced by @header should be formatted as the LUKS
+# specification.
 #
 # @file: Node to create the image format on, mandatory except when
 #'preallocation' is not requested
-- 
2.39.3