Message ID | 1392795478-13434-1-git-send-email-erik.hugne@ericsson.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: <erik.hugne@ericsson.com> Date: Wed, 19 Feb 2014 08:37:58 +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_iovec_reject accomplishes exactly > the same thing. > > Signed-off-by: Erik Hugne <erik.hugne@ericsson.com> > Reviewed-by: Jon Maloy <jon.maloy@ericsson.com> Applied, thank you. -- 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 e4f233d..e998dba 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -1020,12 +1020,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_iovec_reject(sender, hdr, msg_sect, len, - TIPC_ERR_NO_NODE); - return res; + kfree_skb(buf); + tipc_port_iovec_reject(sender, hdr, msg_sect, len, TIPC_ERR_NO_NODE); + return -ENETUNREACH; } /* @@ -1163,8 +1160,9 @@ error: } else { reject: kfree_skb_list(buf_chain); - return tipc_port_iovec_reject(sender, hdr, msg_sect, - len, TIPC_ERR_NO_NODE); + tipc_port_iovec_reject(sender, hdr, msg_sect, len, + TIPC_ERR_NO_NODE); + return -ENETUNREACH; } /* Append chain of fragments to send queue & send them */