From: Sowmini Varadhan <sowmini.varadhan@oracle.com>
To: sparclinux@vger.kernel.org
Subject: Re: [PATCH sparc] ldc_connect() should not return EINVAL when handshake is in progress.
Date: Tue, 05 Aug 2014 13:52:38 +0000 [thread overview]
Message-ID: <20140805135238.GA8629@oracle.com> (raw)
In-Reply-To: <20140801135040.GE19031@oracle.com>
On (08/04/14 20:22), David Miller wrote:
>
> In this case I added "sparc64: " for the subsystem prefix when
> commiting your change.
Thanks, I'll keep that in mind for the future- I wasnt sure of
the taxonomy for ldc.
> BTW, you'll probably come to notice that not a lot of work has gone
> into handling hard disconnect failures properly in LDC and the drivers
> that use it. It's the one area where the LDC framework is very weak.
> Unfortunately a lot of cooperation is required by the drivers
> themselves, because what to do when a LDC connection goes down is
> different in different drivers (networking drivers can drop packets,
> but block drivers have to redo the I/O when the LDC link comes back
> up, for example)
Noted - I've not run into this personally, but we'll add it to the
list.
FWIW, what I'm trying to sort out at the moment is the potential for
triggering a soft lockup on a peer (i.e, a DoS vector).
If a node sends a burst of data and then never drains its incoming
ldc channel, the targetted peer will eventually encounter a
tx_has_no_space_for()/EWOULDBLOCK from __vnet_tx_trigger/vnet_send_ack
(and also __vdc_tx_trigger?) - all of these are infinite loops,
and vnet_send_ack is particularly vicious because it's actually a
paradoxical blocking Tx in the Rx path (due to the vnet protocol design,
I suppose).
Carefully asserting netif_stop_queue() for __vnet_tx_trigger() might
possibly help that case (though it flow-controls all ldc_channels,
instead of just the blocked one), but recovering gracefully
for the other cases needs thought.
--Sowmini
next prev parent reply other threads:[~2014-08-05 13:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-01 13:50 [PATCH sparc] ldc_connect() should not return EINVAL when handshake is in progress Sowmini Varadhan
2014-08-05 3:22 ` David Miller
2014-08-05 13:52 ` Sowmini Varadhan [this message]
2014-08-07 6:00 ` David Miller
2014-08-07 20:17 ` Sowmini Varadhan
2014-08-08 5:26 ` David Miller
2014-08-08 13:55 ` David L Stevens
2014-08-08 17:33 ` 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=20140805135238.GA8629@oracle.com \
--to=sowmini.varadhan@oracle.com \
--cc=sparclinux@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.