summaryrefslogtreecommitdiff
path: root/net/sctp
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-09-16 20:42:46 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-09-16 20:42:46 -0700
commit2bcb132c693566bcb8208cc7ce66b72a4f852ecf (patch)
tree6fc4f05ce18140d86aa78a10380a610734aeaef9 /net/sctp
parent67e6da702753dac8f0540209dded80a0c4e60d81 (diff)
parent5698bd757d55b1bb87edd1a9744ab09c142abfc2 (diff)
downloadlwn-2bcb132c693566bcb8208cc7ce66b72a4f852ecf.tar.gz
lwn-2bcb132c693566bcb8208cc7ce66b72a4f852ecf.zip
Merge 3.6-rc6 into usb-next
This resolves the merge problems with: drivers/usb/dwc3/gadget.c drivers/usb/musb/tusb6010.c that had been seen in linux-next. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/sctp')
-rw-r--r--net/sctp/output.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/net/sctp/output.c b/net/sctp/output.c
index 838e18b4d7ea..be50aa234dcd 100644
--- a/net/sctp/output.c
+++ b/net/sctp/output.c
@@ -364,6 +364,25 @@ finish:
return retval;
}
+static void sctp_packet_release_owner(struct sk_buff *skb)
+{
+ sk_free(skb->sk);
+}
+
+static void sctp_packet_set_owner_w(struct sk_buff *skb, struct sock *sk)
+{
+ skb_orphan(skb);
+ skb->sk = sk;
+ skb->destructor = sctp_packet_release_owner;
+
+ /*
+ * The data chunks have already been accounted for in sctp_sendmsg(),
+ * therefore only reserve a single byte to keep socket around until
+ * the packet has been transmitted.
+ */
+ atomic_inc(&sk->sk_wmem_alloc);
+}
+
/* All packets are sent to the network through this function from
* sctp_outq_tail().
*
@@ -405,7 +424,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
/* Set the owning socket so that we know where to get the
* destination IP address.
*/
- skb_set_owner_w(nskb, sk);
+ sctp_packet_set_owner_w(nskb, sk);
if (!sctp_transport_dst_check(tp)) {
sctp_transport_route(tp, NULL, sctp_sk(sk));