Message ID | 1392730190-20050-1-git-send-email-erik.hugne@ericsson.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
From: <erik.hugne@ericsson.com> Date: Tue, 18 Feb 2014 14:29:50 +0100 > From: Erik Hugne <erik.hugne@ericsson.com> > > When a message could not be sent out because the destination > node or link could not be found, the full message size is > returned from sendmsg() as if it had been sent successfully. > An application will then get a false indication that it's > making forward progress. This problem has existed since the > initial commit in 2.6.16. > > We change this to return -ENETUNREACH if the message cannot be > delivered due to the destination node/link being unavailable. > We also get rid of the redundant tipc_reject_msg call since > freeing the buffer and doing a tipc_port_reject_sections > accomplishes exactly the same thing. > > Signed-off-by: Erik Hugne <erik.hugne@ericsson.com> > Reviewed-by: Jon Maloy <jon.maloy@ericsson.com> This does not apply cleanly to net-next, please respin. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/tipc/link.c b/net/tipc/link.c index 5422e96..e79f0f4 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -1016,12 +1016,9 @@ exit: read_unlock_bh(&tipc_net_lock); /* Couldn't find a link to the destination node */ - if (buf) - return tipc_reject_msg(buf, TIPC_ERR_NO_NODE); - if (res >= 0) - return tipc_port_reject_sections(sender, hdr, msg_sect, - len, TIPC_ERR_NO_NODE); - return res; + kfree_skb(buf); + tipc_port_reject_sections(sender, hdr, msg_sect, len, TIPC_ERR_NO_NODE); + return -ENETUNREACH; } /* @@ -1159,8 +1156,9 @@ error: } else { reject: kfree_skb_list(buf_chain); - return tipc_port_reject_sections(sender, hdr, msg_sect, - len, TIPC_ERR_NO_NODE); + tipc_port_reject_sections(sender, hdr, msg_sect, + len, TIPC_ERR_NO_NODE); + return -ENETUNREACH; } /* Append chain of fragments to send queue & send them */