We happened to find this in the libvirt log: error : virCommandWait:2601 : internal error: Child process (/sbin/zpool get -Hp health,size,free,allocated Xzfs/images) unexpected exit status 1: cannot open 'Xzfs/images': invalid character '/' in pool name
So it seems the data refresh would need to become aware of filesytems and strip this to the basename before doing the call.
This comes from
src/storage/storage_backend_zfs.c cmd = virCommandNewArgList(ZPOOL,
"get", "-Hp",
"health,size,free,allocated",
def->source.name,
NULL);
# fails
zfs list -Hp -t volume -r -o name,volsize,refreservation Xzfs/images
# would work
zfs list -Hp -t volume -r -o name,volsize,refreservation Xzfs
But there might be more to it than what I see, either more changes needed to fully work with subpools or intentionally not working with them.
For the latter we should still consider improving the error handling, like refusing right away with a reasonable message on "virsh pool-define-as".