On 01/23/2018 03:42 AM, Julio Faracco wrote:
Hi Peter,
I agree about "length" parameter.
What I didn't understand is this error (check my test case):
# virsh vol-create-as --pool disk-loop loop0 --capacity 20M
# virsh vol-info loop0 disk-loop
Name: loop0
Type: file
Capacity: 20.00 MiB
Allocation: 20.00 MiB
# dd if=/dev/zero of=/tmp/test bs=10M count=1
# ls -l /tmp/test
-rw-rw-r-- 1 julio julio 10485760 Jan 23 00:31 /tmp/test
Now, let's upload 5M (partial):
# virsh vol-upload loop0 /tmp/test --pool disk-loop --length 5242880
error: cannot send data to volume loop0
error: Library function returned error but did not set virError
This is a libvirt bug. Very likely introduced by me when writing the
sparse streams feature. Please report a bug unless you want to
investigate further. My quick glance at the issue suggests that the
problem lies in daemonStreamHandleWriteData() and the way end of stream
is handled. I mean, daemonStreamHandleWriteData() calls virStreamSend()
which in turn calls virFDStreamWrite(). On the last call, fdst->length
is equal fdst->offset which causes error. Well, it needs to cause stream
finish.
BTW: another problem is that virReportSystemError(ENOSPC) is not being
propagated to the client.
Michal