tipc: eliminate buffer cloning in function tipc_msg_extract()
authorTung Nguyen <tung.q.nguyen@dektech.com.au>
Thu, 28 Jun 2018 20:25:04 +0000 (22:25 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 30 Jun 2018 11:48:16 +0000 (20:48 +0900)
commitef9be755697f1b841c2a219a05df1a72ccd6f471
treedf97059feff846ba6f30769f9096a90b4c2b29b5
parent9ca78674eb6a19acbb1d69e86273ebd1d3edf087
tipc: eliminate buffer cloning in function tipc_msg_extract()

The function tipc_msg_extract() is using skb_clone() to clone inner
messages from a message bundle buffer. Although this method is safe,
it has an undesired effect that each buffer clone inherits the
true-size of the bundling buffer. As a result, the buffer clone
almost always ends up with being copied anyway by the message
validation function. This makes the cloning into a sub-optimization.

In this commit we take the consequence of this realization, and copy
each inner message to a separately allocated buffer up front in the
extraction function.

As a bonus we can now eliminate the two cases where we had to copy
re-routed packets that may potentially go out on the wire again.

Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/msg.c