mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Stefano Stabellini <sstabellini@kernel.org>, xen-devel@lists.xen.org
Cc: linux-kernel@vger.kernel.org, jgross@suse.com,
	Stefano Stabellini <stefano@aporeto.com>
Subject: Re: [PATCH v5 10/13] xen/pvcalls: implement recvmsg
Date: Tue, 17 Oct 2017 17:35:14 -0400	[thread overview]
Message-ID: <318acfff-0d58-fa4b-29eb-29a5d6f0bddf@oracle.com> (raw)
In-Reply-To: <1507336227-20477-10-git-send-email-sstabellini@kernel.org>


> +
> +int pvcalls_front_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
> +		     int flags)
> +{
> +	struct pvcalls_bedata *bedata;
> +	int ret;
> +	struct sock_mapping *map;
> +
> +	if (flags & (MSG_CMSG_CLOEXEC|MSG_ERRQUEUE|MSG_OOB|MSG_TRUNC))
> +		return -EOPNOTSUPP;
> +
> +	pvcalls_enter();
> +	if (!pvcalls_front_dev) {
> +		pvcalls_exit();
> +		return -ENOTCONN;
> +	}
> +	bedata = dev_get_drvdata(&pvcalls_front_dev->dev);
> +
> +	map = (struct sock_mapping *) sock->sk->sk_send_head;
> +	if (!map) {
> +		pvcalls_exit();
> +		return -ENOTSOCK;
> +	}
> +
> +	mutex_lock(&map->active.in_mutex);
> +	if (len > XEN_FLEX_RING_SIZE(PVCALLS_RING_ORDER))
> +		len = XEN_FLEX_RING_SIZE(PVCALLS_RING_ORDER);
> +
> +	while (!(flags & MSG_DONTWAIT) && !pvcalls_front_read_todo(map)) {
> +		wait_event_interruptible(map->active.inflight_conn_req,
> +					 pvcalls_front_read_todo(map));
> +	}
> +	ret = __read_ring(map->active.ring, &map->active.data,
> +			  &msg->msg_iter, len, flags);
> +
> +	if (ret > 0)
> +		notify_remote_via_irq(map->active.irq);
> +	if (ret == 0)
> +		ret = -EAGAIN;

Why not 0? The manpage says:

       EAGAIN or EWOULDBLOCK
              The  socket  is  marked nonblocking and the receive
operation would block, or a receive timeout
              had been set and the timeout expired before data was
received.  POSIX.1 allows either error  to
              be  returned  for  this case, and does not require these
constants to have the same value, so a
              portable application should check for both possibilities.


I don't think either of these conditions is true here.

(Again, should have noticed this earlier, sorry)

-boris


> +	if (ret == -ENOTCONN)
> +		ret = 0;
> +
> +	mutex_unlock(&map->active.in_mutex);
> +	pvcalls_exit();
> +	return ret;
> +}

  reply	other threads:[~2017-10-17 21:34 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-07  0:30 [PATCH v5 00/13] introduce the Xen PV Calls frontend:wq Stefano Stabellini
2017-10-07  0:30 ` [PATCH v5 01/13] xen/pvcalls: introduce the pvcalls xenbus frontend Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 02/13] xen/pvcalls: implement frontend disconnect Stefano Stabellini
2017-10-17 16:01     ` Boris Ostrovsky
2017-10-23 22:44       ` Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 03/13] xen/pvcalls: connect to the backend Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 04/13] xen/pvcalls: implement socket command and handle events Stefano Stabellini
2017-10-17 16:59     ` Boris Ostrovsky
2017-10-20  1:26       ` Stefano Stabellini
2017-10-20 14:24         ` Boris Ostrovsky
2017-10-07  0:30   ` [PATCH v5 05/13] xen/pvcalls: implement connect command Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 06/13] xen/pvcalls: implement bind command Stefano Stabellini
2017-10-17 17:39     ` Boris Ostrovsky
2017-10-20  1:31       ` Stefano Stabellini
2017-10-20 14:40         ` Boris Ostrovsky
2017-10-07  0:30   ` [PATCH v5 07/13] xen/pvcalls: implement listen command Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 08/13] xen/pvcalls: implement accept command Stefano Stabellini
2017-10-17 18:34     ` Boris Ostrovsky
2017-10-23 23:03       ` Stefano Stabellini
2017-10-24 13:52         ` Boris Ostrovsky
2017-10-24 16:42           ` Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 09/13] xen/pvcalls: implement sendmsg Stefano Stabellini
2017-10-17 21:06     ` Boris Ostrovsky
2017-10-20  1:41       ` Stefano Stabellini
2017-10-20 14:44         ` Boris Ostrovsky
2017-10-07  0:30   ` [PATCH v5 10/13] xen/pvcalls: implement recvmsg Stefano Stabellini
2017-10-17 21:35     ` Boris Ostrovsky [this message]
2017-10-20  1:38       ` Stefano Stabellini
2017-10-20 14:43         ` Boris Ostrovsky
2017-10-07  0:30   ` [PATCH v5 11/13] xen/pvcalls: implement poll command Stefano Stabellini
2017-10-17 22:15     ` Boris Ostrovsky
2017-10-23 23:06       ` Stefano Stabellini
2017-10-24 14:02         ` Boris Ostrovsky
2017-10-07  0:30   ` [PATCH v5 12/13] xen/pvcalls: implement release command Stefano Stabellini
2017-10-24 14:17     ` Boris Ostrovsky
2017-10-24 17:17       ` Stefano Stabellini
2017-10-07  0:30   ` [PATCH v5 13/13] xen: introduce a Kconfig option to enable the pvcalls frontend Stefano Stabellini

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=318acfff-0d58-fa4b-29eb-29a5d6f0bddf@oracle.com \
    --to=boris.ostrovsky@oracle.com \
    --cc=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sstabellini@kernel.org \
    --cc=stefano@aporeto.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

all inboxes | Powered by JetHome®