[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Zero-sized reads from XenBus block
On 02/03/16 17:14, Boris Ostrovsky wrote: > On 03/02/2016 11:35 AM, Roger Pau Monné wrote: >> El 2/3/16 a les 17:13, Wei Liu ha escrit: >>> CC Linux kernel and FreeBSD maintainers. >>> >>> On Wed, Mar 02, 2016 at 12:29:26AM +0300, Sergei Lebedev wrote: >>>> Hi list, >>>> >>>> I’m not sure if this is the expected behaviour, but it seems >>>> zero-sized reads from /dev/xen/xenbus block. Here’s sample code in >>>> Python >>>> >>>> import os >>>> fd = os.open("/dev/xen/xenbus", os.O_RDWR) >>>> os.read(fd, 0) # Blocks. >>>> >>>> The issue is not language-specific, similar code in C blocks as well. >> I've tested your code on FreeBSD (after replacing /dev/xen/xenbus with >> /dev/xen/xenstore), and it doesn't block there. AFAICT this is because >> 0-size reads never get to the device "read" routine on FreeBSD, or else >> it would block. > > This is how xenbus driver is designed --- it always blocks until > something is written there. I'm not sure I'd say that it was designed that way, but it's the way it is. > It should indeed return zero right away but I wonder whether someone > might count on current implementation (in the toolstack or elsewhere). > Based on FreeBSD behavior I'd think this shouldn't be the case. POSIX says: "Before any action described below is taken, and if nbyte is zero, the read() function may detect and return errors as described below. In the absence of errors, or if error detection is not performed, the read() function shall return zero and have no other results" xenbus_file_read() should be fixed to handle zero-length reads correctly. But since the semantics of a zero length read are woolly (it /may/ check for errors), I would suggest no application should do this and as such fixing this doesn't need to be a high priority. David _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |