[Libguestfs] Error ret=-1 with EINTR in nbd_connect_systemd_socket_activation()
Motohiro Kawahito
JL25131 at jp.ibm.com
Tue Jul 12 21:37:53 UTC 2022
Thanks for your answer! Will the current code retry poll if it failed with EINTR?
My environment is Ubuntu on IBM Z. We experienced low level I/O functions (such as read, write, poll, etc) fail with EINTR in our environment. Actually, nbd_pread and nbd_pwrite failed with EINTR in our environment, so we wrote a retry code for them. However, in the current problem, nbd_connect_systemd_socket_activation() takes over 1 second, so retrying this function won't work. (it will always fail) I guess that this behavior is different from that of your environment.
Thanks,
Motohiro Kawahito
-----Original Message-----
From: Richard W.M. Jones <rjones at redhat.com>
Sent: Tuesday, July 12, 2022 9:51 PM
To: Motohiro Kawahito <JL25131 at jp.ibm.com>
Cc: libguestfs at redhat.com; eblake at redhat.com
Subject: [EXTERNAL] Re: [Libguestfs] Error ret=-1 with EINTR in nbd_connect_systemd_socket_activation()
On Tue, Jul 12, 2022 at 05:33:41AM +0000, Motohiro Kawahito wrote:
> Hi, I’d like to connect to an encrypted QCOW2 file by
> nbd_connect_systemd_socket_activation(), but I got ret=-1 with EINTR.
> In our program, signals are frequently occurred, so I think this is
> the background of the problem. Could you advise me what should I do
> next? (such as open issue in https://gitlab.com/nbdkit/libnbd or something).
>
> The arg parameter I used is
>
> qemu-nbd --object secret,id=sec0,data=abc123 --image-opts driver=
> qcow2,encrypt.format=luks,encrypt.key-secret=sec0,file.filename=/tmp/
> empty.qcow2
The program worked OK for me. I cleaned up a few things. The attached program contains my clean-ups.
$ ./nbd
Before nbd_create
Before nbd_connect_systemd_socket_activation
After nbd_connect_systemd_socket_activation
size=8539292672
kill end
However I'm using a slightly newer libnbd & qemu-nbd:
libnbd-1.12.0-1.fc37.x86_64
qemu-img-6.1.0-14.fc35.x86_64
> One more problem is that this qemu-nbd process still remains when
> error occurred.
qemu-nbd should be cleaned up if you call nbd_close, otherwise it won't be cleaned up (eg. if you immediately exit on error). See:
https://gitlab.com/nbdkit/libnbd/-/blob/e714b9a7403311a1a173a31d86234324e554ce5b/lib/handle.c#L152
nbdkit has a feature called --exit-on-error which means it will always be cleaned up when the parent process goes away, but qemu-nbd does not have this feature as far as I know. It would be a useful addition.
https://libguestfs.org/nbdkit-captive.1.html#EXIT-WITH-PARENT
> I also attached a test program below. Is there any problem in my test program?
> The version of qemu-nbd is
>
> $ qemu-nbd -V
>
> qemu-nbd 4.2.1 (Debian 1:4.2-3ubuntu6.23)
>
> I created this encrypted QCOW2 image by the following command.
>
> qemu-img create --object secret,id=sec0,data=abc123 -f qcow2 -o
> encrypt.format=
> luks,encrypt.key-secret=sec0 /tmp/empty.qcow2 8539292672
>
> Here is a test program I made. I found that this error occurred even
> for a normal QCOW2 file (not encrypted one). If you need more
> information, please let me know.
>
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
More information about the Libguestfs
mailing list