From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:50380) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gr4jH-0006xn-3q for qemu-devel@nongnu.org; Tue, 05 Feb 2019 12:41:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gr4jG-0000wO-1h for qemu-devel@nongnu.org; Tue, 05 Feb 2019 12:41:51 -0500 Date: Tue, 5 Feb 2019 12:40:57 -0500 From: "Michael S. Tsirkin" Message-ID: <20190205124033-mutt-send-email-mst@kernel.org> References: <20190129175403.18017-1-philmd@redhat.com> <20190129175403.18017-14-philmd@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20190129175403.18017-14-philmd@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [RFC PATCH v2 13/18] oslib-posix: Ignore fcntl("/dev/null", F_SETFL, O_NONBLOCK) failure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Philippe =?iso-8859-1?Q?Mathieu-Daud=E9?= Cc: Brad Smith , qemu-devel@nongnu.org, Stefan Hajnoczi , qemu-block@nongnu.org, Igor Mammedov , Paolo Bonzini , Eric Blake , Peter Maydell , Alex =?iso-8859-1?Q?Benn=E9e?= , Kevin Wolf , Max Reitz , Markus Armbruster , Fam Zheng , Kamil Rytarowski On Tue, Jan 29, 2019 at 06:53:58PM +0100, Philippe Mathieu-Daud=E9 wrote: > Previous to OpenBSD 6.3 [1], fcntl(F_SETFL) is not permitted on > memory devices. > Trying this call sets errno to ENODEV ("not a memory device"): >=20 > 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. >=20 > Do not assert fcntl failures in this specific case (errno set to ENODEV= ) > on OpenBSD. This fixes: >=20 > $ lm32-softmmu/qemu-system-lm32 > assertion "f !=3D -1" failed: file "util/oslib-posix.c", line 247, fu= nction "qemu_set_nonblock" > Abort trap (core dumped) >=20 > [1] The fix seems https://github.com/openbsd/src/commit/c2a35b387f9d3c > "fcntl(F_SETFL) invokes the FIONBIO and FIOASYNC ioctls internally, s= o > the memory devices (/dev/null, /dev/zero, etc) need to permit them." >=20 > Signed-off-by: Philippe Mathieu-Daud=E9 Reviewed-by: Michael S. Tsirkin > --- > util/oslib-posix.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) >=20 > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > index 4ce1ba9ca4..2f0f27e6d9 100644 > --- a/util/oslib-posix.c > +++ b/util/oslib-posix.c > @@ -244,7 +244,17 @@ void qemu_set_nonblock(int fd) > f =3D fcntl(fd, F_GETFL); > assert(f !=3D -1); > f =3D fcntl(fd, F_SETFL, f | O_NONBLOCK); > +#ifdef __OpenBSD__ > + if (f =3D=3D -1) { > + /* > + * Previous to OpenBSD 6.3, fcntl(F_SETFL) is not permitted on > + * memory devices and sets errno to ENODEV. > + */ > + assert(errno =3D=3D ENODEV); > + } > +#else > assert(f !=3D -1); > +#endif > } > =20 > int socket_set_fast_reuse(int fd) > --=20 > 2.20.1