Skip to content
Snippets Groups Projects
  • Eric Blake's avatar
    dbc7b014
    nbd: Add 'qemu-nbd -A' to expose allocation depth · dbc7b014
    Eric Blake authored
    
    Allow the server to expose an additional metacontext to be requested
    by savvy clients.  qemu-nbd adds a new option -A to expose the
    qemu:allocation-depth metacontext through NBD_CMD_BLOCK_STATUS; this
    can also be set via QMP when using block-export-add.
    
    qemu as client is hacked into viewing the key aspects of this new
    context by abusing the already-experimental x-dirty-bitmap option to
    collapse all depths greater than 2, which results in a tri-state value
    visible in the output of 'qemu-img map --output=json' (yes, that means
    x-dirty-bitmap is now a bit of a misnomer, but I didn't feel like
    renaming it as it would introduce a needless break of back-compat,
    even though we make no compat guarantees with x- members):
    
    unallocated (depth 0) => "zero":false, "data":true
    local (depth 1)       => "zero":false, "data":false
    backing (depth 2+)    => "zero":true,  "data":true
    
    libnbd as client is probably a nicer way to get at the information
    without having to decipher such hacks in qemu as client. ;)
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20201027050556.269064-11-eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
    dbc7b014
    History
    nbd: Add 'qemu-nbd -A' to expose allocation depth
    Eric Blake authored
    
    Allow the server to expose an additional metacontext to be requested
    by savvy clients.  qemu-nbd adds a new option -A to expose the
    qemu:allocation-depth metacontext through NBD_CMD_BLOCK_STATUS; this
    can also be set via QMP when using block-export-add.
    
    qemu as client is hacked into viewing the key aspects of this new
    context by abusing the already-experimental x-dirty-bitmap option to
    collapse all depths greater than 2, which results in a tri-state value
    visible in the output of 'qemu-img map --output=json' (yes, that means
    x-dirty-bitmap is now a bit of a misnomer, but I didn't feel like
    renaming it as it would introduce a needless break of back-compat,
    even though we make no compat guarantees with x- members):
    
    unallocated (depth 0) => "zero":false, "data":true
    local (depth 1)       => "zero":false, "data":false
    backing (depth 2+)    => "zero":true,  "data":true
    
    libnbd as client is probably a nicer way to get at the information
    without having to decipher such hacks in qemu as client. ;)
    
    Signed-off-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20201027050556.269064-11-eblake@redhat.com>
    Reviewed-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>