From: David Vrabel <david.vrabel@citrix.com>
To: "Boris Ostrovsky" <boris.ostrovsky@oracle.com>,
"Roger Pau Monné" <roger.pau@citrix.com>,
"Wei Liu" <wei.liu2@citrix.com>,
"Sergei Lebedev" <sergei.a.lebedev@gmail.com>
Cc: David Vrabel <david.vrabel@citrix.com>, xen-devel@lists.xen.org
Subject: Re: Zero-sized reads from XenBus block
Date: Thu, 3 Mar 2016 17:03:30 +0000 [thread overview]
Message-ID: <56D86E62.50101@citrix.com> (raw)
In-Reply-To: <56D71F79.5090106@oracle.com>
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@lists.xen.org
http://lists.xen.org/xen-devel
prev parent reply other threads:[~2016-03-03 17:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 21:29 Zero-sized reads from XenBus block Sergei Lebedev
2016-03-02 16:13 ` Wei Liu
2016-03-02 16:35 ` Roger Pau Monné
2016-03-02 17:14 ` Boris Ostrovsky
2016-03-03 17:03 ` David Vrabel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56D86E62.50101@citrix.com \
--to=david.vrabel@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=roger.pau@citrix.com \
--cc=sergei.a.lebedev@gmail.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).