netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Paul Gortmaker <paul.gortmaker@windriver.com>
To: David Miller <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>, Erik Hugne <erik.hugne@ericsson.com>,
	Paul Gortmaker <paul.gortmaker@windriver.com>
Subject: [PATCH net-next 2/9] tipc: return POLLOUT for sockets in an unconnected state
Date: Thu, 22 Nov 2012 15:59:47 -0500	[thread overview]
Message-ID: <1353617994-3962-3-git-send-email-paul.gortmaker@windriver.com> (raw)
In-Reply-To: <1353617994-3962-1-git-send-email-paul.gortmaker@windriver.com>

From: Erik Hugne <erik.hugne@ericsson.com>

If an implied connect is attempted on a nonblocking STREAM/SEQPACKET
socket during link congestion, the connect message will be discarded
and sendmsg will return EAGAIN. This is normal behavior, and the
application is expected to poll the socket until POLLOUT is set,
after which the connection attempt can be retried.
However, the POLLOUT flag is never set for unconnected sockets and
poll() always returns a zero mask. The application is then left without
a trigger for when it can make another attempt at sending the message.

The solution is to check if we're polling on an unconnected socket
and set the POLLOUT flag if the TIPC port owned by this socket
is not congested. The TIPC ports waiting on a specific link will be
marked as 'not congested' when the link congestion have abated.

Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 net/tipc/socket.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index b5fc8ed..59adc76 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -412,7 +412,7 @@ static int get_name(struct socket *sock, struct sockaddr *uaddr,
  * socket state		flags set
  * ------------		---------
  * unconnected		no read flags
- *			no write flags
+ *			POLLOUT if port is not congested
  *
  * connecting		POLLIN/POLLRDNORM if ACK/NACK in rx queue
  *			no write flags
@@ -442,6 +442,10 @@ static unsigned int poll(struct file *file, struct socket *sock,
 	sock_poll_wait(file, sk_sleep(sk), wait);
 
 	switch ((int)sock->state) {
+	case SS_UNCONNECTED:
+		if (!tipc_sk_port(sk)->congested)
+			mask |= POLLOUT;
+		break;
 	case SS_READY:
 	case SS_CONNECTED:
 		if (!tipc_sk_port(sk)->congested)
-- 
1.7.12.1

  parent reply	other threads:[~2012-11-22 21:00 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-22 20:59 [PATCH net-next 0/9] tipc: updates for what will be v3.8 Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 1/9] tipc: fix race/inefficiencies in poll/wait behaviour Paul Gortmaker
2012-11-22 20:59 ` Paul Gortmaker [this message]
2012-11-22 20:59 ` [PATCH net-next 3/9] tipc: wake up all waiting threads at socket shutdown Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 4/9] tipc: remove the bearer congestion mechanism Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 5/9] tipc: remove supportable flag from bclink structure Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 6/9] tipc: rename supported flag to recv_permitted Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 7/9] tipc: introduce message to synchronize broadcast link Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 8/9] tipc: eliminate an unnecessary cast of node variable Paul Gortmaker
2012-11-22 20:59 ` [PATCH net-next 9/9] tipc: delete TIPC_ADVANCED Kconfig variable Paul Gortmaker
2012-11-23 19:10 ` [PATCH net-next 0/9] tipc: updates for what will be v3.8 David Miller

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=1353617994-3962-3-git-send-email-paul.gortmaker@windriver.com \
    --to=paul.gortmaker@windriver.com \
    --cc=davem@davemloft.net \
    --cc=erik.hugne@ericsson.com \
    --cc=netdev@vger.kernel.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).