From: Erik Hugne <redacted>
This fixes a problem when connect() fails and returns the error
code as a positive value, whereas errno itself is never set. The
reason is that error codes set in sk_err should never be inverted.
Signed-off-by: Erik Hugne <redacted>
---
net/tipc/socket.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--
1.7.9.5
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
On 08/23/2013 09:56 PM, erik.hugne@ericsson.com wrote:
From: Erik Hugne <redacted>
This fixes a problem when connect() fails and returns the error
code as a positive value, whereas errno itself is never set. The
reason is that error codes set in sk_err should never be inverted.
Signed-off-by: Erik Hugne <redacted>
From: Paul Gortmaker <hidden> Date: 2013-08-27 13:20:23
On 13-08-23 09:56 AM, erik.hugne@ericsson.com wrote:
From: Erik Hugne <redacted>
This fixes a problem when connect() fails and returns the error
code as a positive value, whereas errno itself is never set. The
reason is that error codes set in sk_err should never be inverted.
That seems consistent with the other instances at least.
~/git/linux-head$ git grep ECONNREFUSED net|grep sk_err
net/caif/caif_socket.c: cf_sk->sk.sk_err = ECONNREFUSED;
net/decnet/dn_nsp_in.c: sk->sk_err = ECONNREFUSED;
net/ipv4/tcp_input.c: sk->sk_err = ECONNREFUSED;
net/tipc/socket.c: sk->sk_err = -ECONNREFUSED;
~/git/linux-head$
What was the high level user visible symptom in this case?
Stalled connections or ... ?
Thanks,
Paul.
--
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
From: Paul Gortmaker <hidden> Date: 2013-08-27 18:12:17
On 13-08-27 11:18 AM, Erik Hugne wrote:
On Tue, Aug 27, 2013 at 09:20:23AM -0400, Paul Gortmaker wrote:
quoted
What was the high level user visible symptom in this case?
Stalled connections or ... ?
Should the connect fail, if the publication/server is unavailable or some other
error. The connect() call returns the error code directly (as a positive value).
Please send a v2 with the end-user visible symptom clearly described;
as this information is what people use in order to triage whether
commits belong in stable, or net vs. net-next etc. For example:
Should the connect fail, say if the publication/server is unavailable or
some other error, then the code returns a positive return value. Since
most code only checks for a negative return on connect(), it tries to
continue, but will ultimately fail on the 1st sendto() as the strace
snippet below shows.
I've said "most code" since I simply don't know what it was that you were
tracing below. It would help if we knew if this part of a common application
or similar.
Thanks,
Paul.
--
On Tue, Aug 27, 2013 at 09:20:23AM -0400, Paul Gortmaker wrote:
quoted
What was the high level user visible symptom in this case?
Stalled connections or ... ?
Should the connect fail, if the publication/server is unavailable or some other
error. The connect() call returns the error code directly (as a positive value).
Please send a v2 with the end-user visible symptom clearly described;
as this information is what people use in order to triage whether
commits belong in stable, or net vs. net-next etc. For example:
Should the connect fail, say if the publication/server is unavailable or
some other error, then the code returns a positive return value. Since
most code only checks for a negative return on connect(), it tries to
continue, but will ultimately fail on the 1st sendto() as the strace
snippet below shows.
I've said "most code" since I simply don't know what it was that you were
tracing below. It would help if we knew if this part of a common application
or similar.
Firstly it's absolutely wrong that connect() returns a positive error
code - 111(i.e, ECONNREFUSED) if connect() is failed, that is, it
violates POSIX standard.
As the patch's changelog describes, sk_err is incorrectly set to a
negative value instead of positive value in filter_connect(). In
connect(), it will set its return value with sock_error(sk) if it fails.
As the return value of sock_error(sk) almost can be deemed as -sk_err,
this is why we see a positive error code of connect() in below strace log.
But, the patch is absolutely able to fix the issue.
Regards,
Ying