rxrpc: Do zerocopy using MSG_SPLICE_PAGES and page frags
[linux-2.6-microblaze.git] / net / rxrpc / conn_object.c
index df8a271..0af4642 100644 (file)
@@ -68,6 +68,7 @@ struct rxrpc_connection *rxrpc_alloc_connection(struct rxrpc_net *rxnet,
                INIT_LIST_HEAD(&conn->proc_link);
                INIT_LIST_HEAD(&conn->link);
                mutex_init(&conn->security_lock);
+               mutex_init(&conn->tx_data_alloc_lock);
                skb_queue_head_init(&conn->rx_queue);
                conn->rxnet = rxnet;
                conn->security = &rxrpc_no_security;
@@ -341,6 +342,9 @@ static void rxrpc_clean_up_connection(struct work_struct *work)
         */
        rxrpc_purge_queue(&conn->rx_queue);
 
+       if (conn->tx_data_alloc.va)
+               __page_frag_cache_drain(virt_to_page(conn->tx_data_alloc.va),
+                                       conn->tx_data_alloc.pagecnt_bias);
        call_rcu(&conn->rcu, rxrpc_rcu_free_connection);
 }