On 6/23/20 3:19 PM, TobiasHunger wrote:
Public bug reported:

This report is moved from systemd to here:
https://github.com/systemd/systemd/issues/16242

A qemu-nbd device reports that it can discard a lot of bytes:

cat /sys/block/nbd0/queue/discard_max_bytes
2199023255040

That smells fishy. It is 0xffffffff * 512. But in reality, the NBD protocol is (currently) capped at 32 bits, so it cannot handle any request 4G or larger.

It is not qemu-nbd that populates /sys/block/nbd0/queue/discard_max_bytes, but the kernel. Are you sure this is not a bug in the kernel's nbd.ko module, where it may be the case that it is reporting -1 as a 32-bit value which then gets mistakenly turned into a faulty advertisement? Can you tweak your software to behave as if /dev/nbd0 had a discard_max_bytes of 0xfffff000 instead?

In fact, to prove the bug is in the kernel's nbd.ko and not in qemu-nbd, I created an NBD server using nbdkit:

# modprobe nbd
# nbdkit memory 5G
# nbd-client -b 512 localhost /dev/nbd0
# cat /sys/block/nbd0/queue/discard_max_bytes
2199023255040

Same answer, different nbd server.  So it's not qemu's fault.


And indeed, discard works with small images:

$ qemu-img create -f qcow2 /tmp/image.img 2M
$ sudo qemu-nbd --connect=/dev/nbd0 /tmp/image.img
$ sudo blkdiscard /dev/nbd0

but not for bigger ones (still smaller than discard_max_bytes):

$ qemu-img create -f qcow2 /tmp/image.img 5G
$ sudo qemu-nbd --connect=/dev/nbd0 /tmp/image.img
$ sudo blkdiscard /dev/nbd0

** Affects: qemu
      Importance: Undecided
          Status: New


--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


Reply via email to