Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1236298 > unrolled thread
| Started by | Sowmini Varadhan <sowmini.varadhan@oracle.com> |
|---|---|
| First post | 2015-09-30 15:50 +0200 |
| Last post | 2015-09-30 18:20 +0200 |
| Articles | 7 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. Sowmini Varadhan <sowmini.varadhan@oracle.com> - 2015-09-30 15:50 +0200
Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. kbuild test robot <lkp@intel.com> - 2015-09-30 16:50 +0200
Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. Sowmini Varadhan <sowmini.varadhan@oracle.com> - 2015-09-30 18:00 +0200
Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. santosh shilimkar <santosh.shilimkar@oracle.com> - 2015-09-30 18:10 +0200
Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. santosh shilimkar <santosh.shilimkar@oracle.com> - 2015-09-30 18:00 +0200
Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. Sowmini Varadhan <sowmini.varadhan@oracle.com> - 2015-09-30 18:10 +0200
Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. santosh shilimkar <santosh.shilimkar@oracle.com> - 2015-09-30 18:20 +0200
| From | Sowmini Varadhan <sowmini.varadhan@oracle.com> |
|---|---|
| Date | 2015-09-30 15:50 +0200 |
| Subject | [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qepVD-6Bs-1@gated-at.bofh.it> |
Commit f711a6ae062c ("net/rds: RDS-TCP: Always create a new rds_sock
for an incoming connection.") modified rds-tcp so that an incoming SYN
would ignore an existing "client" TCP connection which had the local
port set to the transient port. The motivation for ignoring the existing
"client" connection in f711a6ae was to avoid race conditions and an
endless duel of reconnect attempts triggered by a restart/abort of one
of the nodes in the TCP connection.
However, having separate sockets for active and passive sides
is avoidable, and the simpler model of a single TCP socket for
both send and receives of all RDS connections associated with
that tcp socket makes for easier observability. We avoid the race
conditions from f711a6ae by attempting reconnects in rds_conn_shutdown
if, and only if, the (new) c_outgoing bit is set for RDS_TRANS_TCP.
The c_outgoing bit is initialized in __rds_conn_create().
A side-effect of re-using the client rds_connection for an incoming
SYN is the potential of encountering duelling SYNs, i.e., we
have an outgoing RDS_CONN_CONNECTING socket when we get the incoming
SYN. The logic to arbitrate this criss-crossing SYN exchange in
rds_tcp_accept_one() has been modified to emulate the BGP state
machine: the smaller IP address should back off from the connection attempt.
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
---
net/rds/connection.c | 22 ++++++----------------
net/rds/rds.h | 4 +++-
net/rds/tcp_listen.c | 19 +++++++------------
3 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/net/rds/connection.c b/net/rds/connection.c
index 49adeef..d456403 100644
--- a/net/rds/connection.c
+++ b/net/rds/connection.c
@@ -128,10 +128,7 @@ static struct rds_connection *__rds_conn_create(struct net *net,
struct rds_transport *loop_trans;
unsigned long flags;
int ret;
- struct rds_transport *otrans = trans;
- if (!is_outgoing && otrans->t_type == RDS_TRANS_TCP)
- goto new_conn;
rcu_read_lock();
conn = rds_conn_lookup(net, head, laddr, faddr, trans);
if (conn && conn->c_loopback && conn->c_trans != &rds_loop_transport &&
@@ -147,7 +144,6 @@ static struct rds_connection *__rds_conn_create(struct net *net,
if (conn)
goto out;
-new_conn:
conn = kmem_cache_zalloc(rds_conn_slab, gfp);
if (!conn) {
conn = ERR_PTR(-ENOMEM);
@@ -207,6 +203,7 @@ static struct rds_connection *__rds_conn_create(struct net *net,
atomic_set(&conn->c_state, RDS_CONN_DOWN);
conn->c_send_gen = 0;
+ conn->c_outgoing = (is_outgoing ? 1 : 0);
conn->c_reconnect_jiffies = 0;
INIT_DELAYED_WORK(&conn->c_send_w, rds_send_worker);
INIT_DELAYED_WORK(&conn->c_recv_w, rds_recv_worker);
@@ -243,22 +240,13 @@ static struct rds_connection *__rds_conn_create(struct net *net,
/* Creating normal conn */
struct rds_connection *found;
- if (!is_outgoing && otrans->t_type == RDS_TRANS_TCP)
- found = NULL;
- else
- found = rds_conn_lookup(net, head, laddr, faddr, trans);
+ found = rds_conn_lookup(net, head, laddr, faddr, trans);
if (found) {
trans->conn_free(conn->c_transport_data);
kmem_cache_free(rds_conn_slab, conn);
conn = found;
} else {
- if ((is_outgoing && otrans->t_type == RDS_TRANS_TCP) ||
- (otrans->t_type != RDS_TRANS_TCP)) {
- /* Only the active side should be added to
- * reconnect list for TCP.
- */
- hlist_add_head_rcu(&conn->c_hash_node, head);
- }
+ hlist_add_head_rcu(&conn->c_hash_node, head);
rds_cong_add_conn(conn);
rds_conn_count++;
}
@@ -337,7 +325,9 @@ void rds_conn_shutdown(struct rds_connection *conn)
rcu_read_lock();
if (!hlist_unhashed(&conn->c_hash_node)) {
rcu_read_unlock();
- rds_queue_reconnect(conn);
+ if (conn->c_trans->t_type != RDS_TRANS_TCP ||
+ conn->c_outgoing == 1)
+ rds_queue_reconnect(conn);
} else {
rcu_read_unlock();
}
diff --git a/net/rds/rds.h b/net/rds/rds.h
index afb4048..b4c7ac0 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
@@ -86,7 +86,9 @@ struct rds_connection {
struct hlist_node c_hash_node;
__be32 c_laddr;
__be32 c_faddr;
- unsigned int c_loopback:1;
+ unsigned int c_loopback:1,
+ c_outgoing:1,
+ c_pad_to_32:30;
struct rds_connection *c_passive;
struct rds_cong_map *c_lcong;
diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
index 444d78d..ee70d13 100644
--- a/net/rds/tcp_listen.c
+++ b/net/rds/tcp_listen.c
@@ -110,28 +110,23 @@ int rds_tcp_accept_one(struct socket *sock)
goto out;
}
/* An incoming SYN request came in, and TCP just accepted it.
- * We always create a new conn for listen side of TCP, and do not
- * add it to the c_hash_list.
*
* If the client reboots, this conn will need to be cleaned up.
* rds_tcp_state_change() will do that cleanup
*/
rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
- WARN_ON(!rs_tcp || rs_tcp->t_sock);
+ if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
+ struct sock *nsk = new_sock->sk;
- /*
- * see the comment above rds_queue_delayed_reconnect()
- */
- if (!rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_CONNECTING)) {
- if (rds_conn_state(conn) == RDS_CONN_UP)
- rds_tcp_stats_inc(s_tcp_listen_closed_stale);
- else
- rds_tcp_stats_inc(s_tcp_connect_raced);
- rds_conn_drop(conn);
+ nsk->sk_user_data = NULL;
+ nsk->sk_prot->disconnect(nsk, 0);
+ tcp_done(nsk);
+ new_sock = NULL;
ret = 0;
goto out;
}
+ rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_CONNECTING);
rds_tcp_set_callbacks(new_sock, conn);
rds_connect_complete(conn);
new_sock = NULL;
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | kbuild test robot <lkp@intel.com> |
|---|---|
| Date | 2015-09-30 16:50 +0200 |
| Subject | Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qeqRH-7Z1-15@gated-at.bofh.it> |
| In reply to | #1236298 |
Hi Sowmini,
[auto build test results on v4.3-rc3 -- if it's inappropriate base, please ignore]
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
>> net/rds/tcp_listen.c:118:35: sparse: restricted __be32 degrades to integer
net/rds/tcp_listen.c:118:56: sparse: restricted __be32 degrades to integer
net/rds/tcp_listen.c:187:29: sparse: incorrect type in assignment (different base types)
net/rds/tcp_listen.c:187:29: expected restricted __be32 [assigned] [usertype] s_addr
net/rds/tcp_listen.c:187:29: got unsigned int [unsigned] [usertype] <noident>
net/rds/tcp_listen.c:188:22: sparse: incorrect type in assignment (different base types)
net/rds/tcp_listen.c:188:22: expected restricted __be16 [assigned] [usertype] sin_port
net/rds/tcp_listen.c:188:22: got unsigned short [unsigned] [usertype] <noident>
vim +118 net/rds/tcp_listen.c
102 &inet->inet_saddr, ntohs(inet->inet_sport),
103 &inet->inet_daddr, ntohs(inet->inet_dport));
104
105 conn = rds_conn_create(sock_net(sock->sk),
106 inet->inet_saddr, inet->inet_daddr,
107 &rds_tcp_transport, GFP_KERNEL);
108 if (IS_ERR(conn)) {
109 ret = PTR_ERR(conn);
110 goto out;
111 }
112 /* An incoming SYN request came in, and TCP just accepted it.
113 *
114 * If the client reboots, this conn will need to be cleaned up.
115 * rds_tcp_state_change() will do that cleanup
116 */
117 rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
> 118 if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
119 struct sock *nsk = new_sock->sk;
120
121 nsk->sk_user_data = NULL;
122 nsk->sk_prot->disconnect(nsk, 0);
123 tcp_done(nsk);
124 new_sock = NULL;
125 ret = 0;
126 goto out;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Sowmini Varadhan <sowmini.varadhan@oracle.com> |
|---|---|
| Date | 2015-09-30 18:00 +0200 |
| Subject | Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qerXt-14n-29@gated-at.bofh.it> |
| In reply to | #1236298 |
On (09/30/15 08:50), santosh shilimkar wrote:
> minor nit though not a strict rule. Just to be consistent based on
> what we are following.
>
> - core RDS patches "RDS:"
> - RDS IB patches "RDS: IB:" or "RDS/IB:"
> - RDS IW patches "RDS: IW:" or
> - RDS TCP can use "RDS: TCP" or "RDS/TCP:"
Ok, but in this case patch 1/3 the changes affect both core and rds-tcp
modules.
Working on patchv2 that will address Sergei's comments and the
kbuild-test-robot warning as well
>
> $subject
> s/net/rds:/RDS:
>
> On 9/30/2015 6:45 AM, Sowmini Varadhan wrote:
> >Commit f711a6ae062c ("net/rds: RDS-TCP: Always create a new rds_sock
> >for an incoming connection.") modified rds-tcp so that an incoming SYN
> >would ignore an existing "client" TCP connection which had the local
> >port set to the transient port. The motivation for ignoring the existing
> >"client" connection in f711a6ae was to avoid race conditions and an
> >endless duel of reconnect attempts triggered by a restart/abort of one
> >of the nodes in the TCP connection.
> >
> >However, having separate sockets for active and passive sides
> >is avoidable, and the simpler model of a single TCP socket for
> >both send and receives of all RDS connections associated with
> >that tcp socket makes for easier observability. We avoid the race
> >conditions from f711a6ae by attempting reconnects in rds_conn_shutdown
> >if, and only if, the (new) c_outgoing bit is set for RDS_TRANS_TCP.
> >The c_outgoing bit is initialized in __rds_conn_create().
> >
> >A side-effect of re-using the client rds_connection for an incoming
> >SYN is the potential of encountering duelling SYNs, i.e., we
> >have an outgoing RDS_CONN_CONNECTING socket when we get the incoming
> >SYN. The logic to arbitrate this criss-crossing SYN exchange in
> >rds_tcp_accept_one() has been modified to emulate the BGP state
> >machine: the smaller IP address should back off from the connection attempt.
> >
> >Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
> >---
> > net/rds/connection.c | 22 ++++++----------------
> > net/rds/rds.h | 4 +++-
> > net/rds/tcp_listen.c | 19 +++++++------------
> > 3 files changed, 16 insertions(+), 29 deletions(-)
> >
>
> [...]
>
> >diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
> >index 444d78d..ee70d13 100644
> >--- a/net/rds/tcp_listen.c
> >+++ b/net/rds/tcp_listen.c
> >@@ -110,28 +110,23 @@ int rds_tcp_accept_one(struct socket *sock)
> > goto out;
> > }
> > /* An incoming SYN request came in, and TCP just accepted it.
> >- * We always create a new conn for listen side of TCP, and do not
> >- * add it to the c_hash_list.
> > *
> > * If the client reboots, this conn will need to be cleaned up.
> > * rds_tcp_state_change() will do that cleanup
> > */
> > rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
> >- WARN_ON(!rs_tcp || rs_tcp->t_sock);
> >+ if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
> >+ struct sock *nsk = new_sock->sk;
> >
> Any reason you dropped the WARN_ON. Note that till we got commit
> 74e98eb0 (" RDS: verify the underlying transport exists before creating
> a connection") merged, we had an issue. That guards it now.
>
> Am curious about WARN_ON() and hence the question.
>
> Rest of the patch looks fine to me.
> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | santosh shilimkar <santosh.shilimkar@oracle.com> |
|---|---|
| Date | 2015-09-30 18:10 +0200 |
| Subject | Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qes77-1uV-11@gated-at.bofh.it> |
| In reply to | #1236472 |
On 9/30/2015 8:58 AM, Sowmini Varadhan wrote:
> On (09/30/15 08:50), santosh shilimkar wrote:
>> minor nit though not a strict rule. Just to be consistent based on
>> what we are following.
>>
>> - core RDS patches "RDS:"
>> - RDS IB patches "RDS: IB:" or "RDS/IB:"
>> - RDS IW patches "RDS: IW:" or
>> - RDS TCP can use "RDS: TCP" or "RDS/TCP:"
>
> Ok, but in this case patch 1/3 the changes affect both core and rds-tcp
> modules.
>
As I said, these are not strict rules but just what have been followed.
I would use "RDS: TCP:" for first patch as well but I let you
take a call :-)
> Working on patchv2 that will address Sergei's comments and the
> kbuild-test-robot warning as well
>
OK. How about the dropped WARN_ON() question ?
>>
>> $subject
>> s/net/rds:/RDS:
>>
>> On 9/30/2015 6:45 AM, Sowmini Varadhan wrote:
>>> Commit f711a6ae062c ("net/rds: RDS-TCP: Always create a new rds_sock
>>> for an incoming connection.") modified rds-tcp so that an incoming SYN
>>> would ignore an existing "client" TCP connection which had the local
>>> port set to the transient port. The motivation for ignoring the existing
>>> "client" connection in f711a6ae was to avoid race conditions and an
>>> endless duel of reconnect attempts triggered by a restart/abort of one
>>> of the nodes in the TCP connection.
>>>
>>> However, having separate sockets for active and passive sides
>>> is avoidable, and the simpler model of a single TCP socket for
>>> both send and receives of all RDS connections associated with
>>> that tcp socket makes for easier observability. We avoid the race
>>> conditions from f711a6ae by attempting reconnects in rds_conn_shutdown
>>> if, and only if, the (new) c_outgoing bit is set for RDS_TRANS_TCP.
>>> The c_outgoing bit is initialized in __rds_conn_create().
>>>
>>> A side-effect of re-using the client rds_connection for an incoming
>>> SYN is the potential of encountering duelling SYNs, i.e., we
>>> have an outgoing RDS_CONN_CONNECTING socket when we get the incoming
>>> SYN. The logic to arbitrate this criss-crossing SYN exchange in
>>> rds_tcp_accept_one() has been modified to emulate the BGP state
>>> machine: the smaller IP address should back off from the connection attempt.
>>>
>>> Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
>>> ---
>>> net/rds/connection.c | 22 ++++++----------------
>>> net/rds/rds.h | 4 +++-
>>> net/rds/tcp_listen.c | 19 +++++++------------
>>> 3 files changed, 16 insertions(+), 29 deletions(-)
>>>
>>
>> [...]
>>
>>> diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
>>> index 444d78d..ee70d13 100644
>>> --- a/net/rds/tcp_listen.c
>>> +++ b/net/rds/tcp_listen.c
>>> @@ -110,28 +110,23 @@ int rds_tcp_accept_one(struct socket *sock)
>>> goto out;
>>> }
>>> /* An incoming SYN request came in, and TCP just accepted it.
>>> - * We always create a new conn for listen side of TCP, and do not
>>> - * add it to the c_hash_list.
>>> *
>>> * If the client reboots, this conn will need to be cleaned up.
>>> * rds_tcp_state_change() will do that cleanup
>>> */
>>> rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
>>> - WARN_ON(!rs_tcp || rs_tcp->t_sock);
>>> + if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
>>> + struct sock *nsk = new_sock->sk;
>>>
>> Any reason you dropped the WARN_ON. Note that till we got commit
>> 74e98eb0 (" RDS: verify the underlying transport exists before creating
>> a connection") merged, we had an issue. That guards it now.
>>
>> Am curious about WARN_ON() and hence the question.
>>
>> Rest of the patch looks fine to me.
>> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
>>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | santosh shilimkar <santosh.shilimkar@oracle.com> |
|---|---|
| Date | 2015-09-30 18:00 +0200 |
| Subject | Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qerXt-14n-31@gated-at.bofh.it> |
| In reply to | #1236298 |
minor nit though not a strict rule. Just to be consistent based on
what we are following.
- core RDS patches "RDS:"
- RDS IB patches "RDS: IB:" or "RDS/IB:"
- RDS IW patches "RDS: IW:" or
- RDS TCP can use "RDS: TCP" or "RDS/TCP:"
$subject
s/net/rds:/RDS:
On 9/30/2015 6:45 AM, Sowmini Varadhan wrote:
> Commit f711a6ae062c ("net/rds: RDS-TCP: Always create a new rds_sock
> for an incoming connection.") modified rds-tcp so that an incoming SYN
> would ignore an existing "client" TCP connection which had the local
> port set to the transient port. The motivation for ignoring the existing
> "client" connection in f711a6ae was to avoid race conditions and an
> endless duel of reconnect attempts triggered by a restart/abort of one
> of the nodes in the TCP connection.
>
> However, having separate sockets for active and passive sides
> is avoidable, and the simpler model of a single TCP socket for
> both send and receives of all RDS connections associated with
> that tcp socket makes for easier observability. We avoid the race
> conditions from f711a6ae by attempting reconnects in rds_conn_shutdown
> if, and only if, the (new) c_outgoing bit is set for RDS_TRANS_TCP.
> The c_outgoing bit is initialized in __rds_conn_create().
>
> A side-effect of re-using the client rds_connection for an incoming
> SYN is the potential of encountering duelling SYNs, i.e., we
> have an outgoing RDS_CONN_CONNECTING socket when we get the incoming
> SYN. The logic to arbitrate this criss-crossing SYN exchange in
> rds_tcp_accept_one() has been modified to emulate the BGP state
> machine: the smaller IP address should back off from the connection attempt.
>
> Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
> ---
> net/rds/connection.c | 22 ++++++----------------
> net/rds/rds.h | 4 +++-
> net/rds/tcp_listen.c | 19 +++++++------------
> 3 files changed, 16 insertions(+), 29 deletions(-)
>
[...]
> diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c
> index 444d78d..ee70d13 100644
> --- a/net/rds/tcp_listen.c
> +++ b/net/rds/tcp_listen.c
> @@ -110,28 +110,23 @@ int rds_tcp_accept_one(struct socket *sock)
> goto out;
> }
> /* An incoming SYN request came in, and TCP just accepted it.
> - * We always create a new conn for listen side of TCP, and do not
> - * add it to the c_hash_list.
> *
> * If the client reboots, this conn will need to be cleaned up.
> * rds_tcp_state_change() will do that cleanup
> */
> rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
> - WARN_ON(!rs_tcp || rs_tcp->t_sock);
> + if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
> + struct sock *nsk = new_sock->sk;
>
Any reason you dropped the WARN_ON. Note that till we got commit
74e98eb0 (" RDS: verify the underlying transport exists before creating
a connection") merged, we had an issue. That guards it now.
Am curious about WARN_ON() and hence the question.
Rest of the patch looks fine to me.
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Sowmini Varadhan <sowmini.varadhan@oracle.com> |
|---|---|
| Date | 2015-09-30 18:10 +0200 |
| Subject | Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qes77-1uV-9@gated-at.bofh.it> |
| In reply to | #1236480 |
On (09/30/15 08:50), santosh shilimkar wrote:
> > rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
> >- WARN_ON(!rs_tcp || rs_tcp->t_sock);
> >+ if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
> >+ struct sock *nsk = new_sock->sk;
> >
> Any reason you dropped the WARN_ON. Note that till we got commit
> 74e98eb0 (" RDS: verify the underlying transport exists before creating
> a connection") merged, we had an issue. That guards it now.
That was done deliberately. Now that we have only one tcp socket,
we can run into an rds_tcp_connection for an outgoing connection
that we initiated, thus rs_tcp->t_sock can be non-null - which is
why a new check is added in the newly added line in the patch.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | santosh shilimkar <santosh.shilimkar@oracle.com> |
|---|---|
| Date | 2015-09-30 18:20 +0200 |
| Subject | Re: [PATCH net-next 1/3] net/rds: Use a single TCP socket for both send and receive. |
| Message-ID | <qesgO-1GU-15@gated-at.bofh.it> |
| In reply to | #1236484 |
On 9/30/2015 9:09 AM, Sowmini Varadhan wrote:
> On (09/30/15 08:50), santosh shilimkar wrote:
>>> rs_tcp = (struct rds_tcp_connection *)conn->c_transport_data;
>>> - WARN_ON(!rs_tcp || rs_tcp->t_sock);
>>> + if (rs_tcp->t_sock && inet->inet_saddr < inet->inet_daddr) {
>>> + struct sock *nsk = new_sock->sk;
>>>
>> Any reason you dropped the WARN_ON. Note that till we got commit
>> 74e98eb0 (" RDS: verify the underlying transport exists before creating
>> a connection") merged, we had an issue. That guards it now.
>
> That was done deliberately. Now that we have only one tcp socket,
> we can run into an rds_tcp_connection for an outgoing connection
> that we initiated, thus rs_tcp->t_sock can be non-null - which is
> why a new check is added in the newly added line in the patch.
>
Thanks for clarification.
Regards,
Santosh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web