Hi, On 1/15/19 9:04 PM, Michael S. Tsirkin wrote: > From: Li Qiang <liq...@163.com> > > Assert that the return value is not an error. This is like commit > 7e6478e7d4f for qemu_set_cloexec. > > Signed-off-by: Li Qiang <liq...@163.com> > Reviewed-by: Thomas Huth <th...@redhat.com> > Reviewed-by: Michael S. Tsirkin <m...@redhat.com> > Signed-off-by: Michael S. Tsirkin <m...@redhat.com> > --- > util/oslib-posix.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > index c1bee2a581..4ce1ba9ca4 100644 > --- a/util/oslib-posix.c > +++ b/util/oslib-posix.c > @@ -233,14 +233,18 @@ void qemu_set_block(int fd) > { > int f; > f = fcntl(fd, F_GETFL); > - fcntl(fd, F_SETFL, f & ~O_NONBLOCK); > + assert(f != -1); > + f = fcntl(fd, F_SETFL, f & ~O_NONBLOCK); > + assert(f != -1); > } > > void qemu_set_nonblock(int fd) > { > int f; > f = fcntl(fd, F_GETFL); > - fcntl(fd, F_SETFL, f | O_NONBLOCK); > + assert(f != -1); > + f = fcntl(fd, F_SETFL, f | O_NONBLOCK); > + assert(f != -1);
This commit breaks OpenBSD, when trying to start QEMU I get: assertion "f != -1" failed: file "util/oslib-posix.c", line 247, function "qemu_set_nonblock" Having a quick look at gdb, the last device opened is /dev/null, and when fcntl() fails we have errno = ENODEV. 19 ENODEV Operation not supported by device. An attempt was made to apply an inappropriate function to a device, for example, trying to read a write-only device such as a printer. Digging further I found a recent commit which could fix this problem: https://github.com/openbsd/src/commit/c2a35b387f9d3c "fcntl(F_SETFL) invokes the FIONBIO and FIOASYNC ioctls internally, so the memory devices (/dev/null, /dev/zero, etc) need to permit them." Brad: Do you think this might be the fix? If so, any idea what is the first release to contain this fix? I don't know OpenBSD and can't figure this out... Also, what would be the cleaner QEMU fix? Thanks, Phil. > } > > int socket_set_fast_reuse(int fd) >