]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: zfs: fix incorrect volsize,refreservation on zvol creation
authorGeorge Melikov <mail@gmelikov.ru>
Tue, 28 Apr 2026 14:40:56 +0000 (17:40 +0300)
committerRoman Bogorodskiy <bogorodskiy@gmail.com>
Sun, 3 May 2026 05:02:53 +0000 (07:02 +0200)
Reproduce:
```bash
root@minime:~# virsh vol-list rpool
 Name                                   Path
----------------------------------------------------------------------------------------------------
 da52bdd9-eb75-5746-a2ce-a511067914f5   /dev/zvol/rpool/disks/da52bdd9-eb75-5746-a2ce-a511067914f5
 faafd0f9-33c8-5b23-990c-fa7b4bfe8dcf   /dev/zvol/rpool/disks/faafd0f9-33c8-5b23-990c-fa7b4bfe8dcf

root@minime:~# cat > /tmp/vol
<volume>
  <name>eeee</name>
  <capacity>4294967296</capacity>
  <allocation>4294967296</allocation>
</volume>

root@minime:~# virsh vol-create rpool /tmp/vol
Vol eeee created from /tmp/vol

root@minime:~# virsh vol-list rpool
 Name                                   Path
----------------------------------------------------------------------------------------------------
 da52bdd9-eb75-5746-a2ce-a511067914f5   /dev/zvol/rpool/disks/da52bdd9-eb75-5746-a2ce-a511067914f5
 eeee                                   /dev/zvol/rpool/disks/eeee
 faafd0f9-33c8-5b23-990c-fa7b4bfe8dcf   /dev/zvol/rpool/disks/faafd0f9-33c8-5b23-990c-fa7b4bfe8dcf

root@minime:~# virsh vol-info --pool rpool eeee
Name:           eeee
Type:           block
Capacity:       10.00 GiB
Allocation:     0.00 B

root@minime:~# virsh pool-refresh --pool rpool
Pool rpool refreshed

root@minime:~# virsh vol-info --pool rpool eeee
Name:           eeee
Type:           block
Capacity:       4.00 GiB
Allocation:     4.06 GiB
```

Fix is trivial: check zvol by name and return early if this is different
zvol.

Signed-off-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
src/storage/storage_backend_zfs.c

index 33434d0cacf883ca4217019c6b80525cfd72029e..2cb555a6e6110c4b7a52ef1449fa331ce51ade70 100644 (file)
@@ -132,8 +132,10 @@ virStorageBackendZFSParseVol(virStoragePoolObj *pool,
 
     if (vol == NULL)
         volume = virStorageVolDefFindByName(pool, vol_name);
-    else
+    else if (STREQ(vol_name, vol->name))
         volume = vol;
+    else
+        return 0;
 
     if (volume == NULL) {
         volume = g_new0(virStorageVolDef, 1);