<div dir="ltr"><div>Hello list, we have encountered a strange (possible) bug in DRBD while using a resource with qemu.</div><div><br></div><div> When we create a persistent raw disk on OpenNebula using Linstor addon and attach it to a running VM everything works fine until you detach it from the VM and attach it again. The second time you attach the resource the diskless resource stops working. The resource exists. For example, `ls /dev/drbd/by-res/OpenNebula-Image-575/0` works but `dd` doesn&#39;t copy any bytes:</div><br># dd if=/dev/drbd/by-res/OpenNebula-Image-575/0 of=/dev/null bs=1M count=10<br>0+0 records in<br>0+0 records out<br>0 bytes (0 B) copied, 0.000108231 s, 0.0 kB/s<br><br>Strangely, this problem occurs alternatively, that is, the first time you attach a raw disk to a running VM, things work. The second time (detach and attach) they don&#39;t, the third time they work again, and so on.<br><div></div><div><div><br></div><div>Setup:</div><div>1. A node running OpenNebula and Linstor server.<br></div><div>2. 3 x Linstor satellites (disk-ful) nodes</div><div>3. 1 x VM (diskless-only) node. (referred to as &#39;VMHost&#39; below)<br></div><div>4. Place count: 3</div><div>5. DRBD runs over LVM thinpool on the Linstor satellites.<br></div></div><div><br></div><div>Steps to reproduce are given below:</div><br>**Attempt 1 (works)**<br>1. `linstor rd c test-disk2`<br>2. `linstor vd c test-disk2 10G`<br>3. `linstor r c linstor-drbd1 linstor-drbd2 linstor-drbd3 test-disk2 --storage-pool=data`<br>4. `linstor r c --drbd-diskless VMHost test-disk2 -s DfltDisklessStorPool`<br>5. Attach the disk to qemu VM: `ssh VMHost &#39;virsh attach-disk 15 /dev/drbd/by-res/test-disk2/0 vdb&#39;`<br><div>6. Test the resource:<br></div><div>    # ssh VMHost &#39;dd if=/dev/drbd/by-res/test-disk2/0 of=/dev/null bs=1M count=10&#39;`</div><div></div><div>    10+0 records in</div>    10+0 records out<br>    10485760 bytes (10 MB) copied, 0.317778 s, 33.0 MB/s<br><br>7. Detach from VM: `ssh VMHost &#39;virsh detach-disk 15 vdb&#39;`<br>8. Delete diskless resource: `linstor r d VMHost test-disk2`<br><br>**Attempt 2 (doesn&#39;t work)**<br>1. Create diskless resource: `linstor r c --drbd-diskless VMHost test-disk2 -s DfltDisklessStorPool`<br>2. No need to attach to qemu, the diskless resource just doesn&#39;t work.<br><div>3. Test the resource:</div><div>    # ssh VMHost &#39;dd if=/dev/drbd/by-res/test-disk2/0 of=/dev/null bs=1M count=10&#39; <br></div>    0+0 records in<br>    0+0 records out<br>    0 bytes (0 B) copied, 0.000108231 s, 0.0 kB/s<br><br>4. Delete diskless resource: `linstor r d VMHost test-disk2`<br><br>**Attempt 3 (works)**<br><div>1. `linstor r c --drbd-diskless VMHost test-disk2 -s DfltDisklessStorPool`</div>2. No need to attach to qemu, the resource will work this time.<br>3. # ssh VMHost &#39;dd if=/dev/drbd/by-res/test-disk2/0 of=/dev/null bs=1M count=10&#39;<br>    10+0 records in<br>    10+0 records out<br>    10485760 bytes (10 MB) copied, 0.0338463 s, 310 MB/s<br><br><div>We have been able to track the problem to DRBD and qemu. If the resource was attached to qemu at some point then the resource shows this behaviour otherwise it works just fine, subsequent deletion and then creation of diskless resource results in bytes getting read/written to the resource.</div><div><br></div><div>We can see that  manually running `drdbadm connect` and `drbdadm disconnect` on the resource on VMHost makes the resource work (in even-numbered attempts), hence, no need to delete and re-create the diskless resource using Linstor, at least, for reproducing this bug.<br></div><div><br></div><div>We are able to reproduce the bug on two different setups with different hardware but same versions of software.<br></div><div><br></div>Version numbers being used:<br><br># drbdadm --version<br>DRBDADM_BUILDTAG=GIT-hash:\ fa9b9d3823b6e1792919e711fcf6164cac629290\ build\ by\ mockbuild@\,\ 2021-01-09\ 17:01:51<br>DRBDADM_API_VERSION=2<br>DRBD_KERNEL_VERSION_CODE=0x090019<br>DRBD_KERNEL_VERSION=9.0.25<br>DRBDADM_VERSION_CODE=0x090f01<br>DRBDADM_VERSION=9.15.1<br><br># /usr/libexec/qemu-kvm --version<br>QEMU emulator version 2.12.0 (qemu-kvm-ev-2.12.0-44.1.el7_8.1)<br>Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers<br><br># virsh --version<br>5.0.0<br><div><br></div><div>Hope I am able to detail out the issue. Please let me know if I can provide additional information (strace, logs, etc.) I will be happy to.</div><div><br></div><div>PS: The bug is reproducible even if you set the resource as primary on the diskless node before attaching it to qemu or reading any bytes from it.</div><div><br></div><div>Thank you,</div><div>Chirag Anand</div><div></div><a href="http://atvariance.in/chiraganand">http://atvariance.in/chiraganand</a></div>