On 06/10/22 13:47, Richard W.M. Jones wrote:
Fix an assertion failure in nbdkit:
$ qemu-img create -f luks --object secret,data=LETMEPASS,id=sec0 -o key-secret=sec0
encrypted.img 100M
Formatting 'encrypted.img', fmt=luks size=104857600 key-secret=sec0
$ rm -f data.img
$ truncate -s 100M data.img
$ nbdkit file encrypted.img --filter=luks passphrase=LETMEPASS --run 'nbdcopy
data.img $nbd' -v
...
nbdkit: file.10: debug: luks: zero count=104857600 offset=0 may_trim=1 fua=0 fast=0
nbdkit: backend.c:718: backend_zero: Assertion `c->can_zero > NBDKIT_ZERO_NONE'
failed.
It's always wrong for filters to try to return NBDKIT_ZERO_EMULATE, at
least with the current implementation of the server. This is because
emulation is only done at the plugin layer (see server/plugins.c:
plugin_zero), and not at the filter layer.
We could adjust nbdkit's filter layer (server/filter.c:filter_zero) to
do similar emulation, but an easier solution here is not to advertise
it to the client at all.
In future we should adjust the LUKS plugin so it does whatever the
kernel does for trimming/zeroing.
---
filters/luks/luks.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/filters/luks/luks.c b/filters/luks/luks.c
index 8ad3f4ec..9c1a3389 100644
--- a/filters/luks/luks.c
+++ b/filters/luks/luks.c
@@ -189,7 +189,7 @@ luks_can_trim (nbdkit_next *next, void *handle)
static int
luks_can_zero (nbdkit_next *next, void *handle)
{
- return NBDKIT_ZERO_EMULATE;
+ return NBDKIT_ZERO_NONE;
}
static int
so this is withdrawn now, right?