]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/core/request_sock.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[linux-2.6-omap-h63xx.git] / net / core / request_sock.c
index 5f0818d815e6b700408f2dcea1986b87fdc09645..2d3035d3abd7a923eef8849f0b31590ee418bdd4 100644 (file)
@@ -69,7 +69,38 @@ int reqsk_queue_alloc(struct request_sock_queue *queue,
        return 0;
 }
 
-EXPORT_SYMBOL(reqsk_queue_alloc);
+void __reqsk_queue_destroy(struct request_sock_queue *queue)
+{
+       struct listen_sock *lopt;
+       size_t lopt_size;
+
+       /*
+        * this is an error recovery path only
+        * no locking needed and the lopt is not NULL
+        */
+
+       lopt = queue->listen_opt;
+       lopt_size = sizeof(struct listen_sock) +
+               lopt->nr_table_entries * sizeof(struct request_sock *);
+
+       if (lopt_size > PAGE_SIZE)
+               vfree(lopt);
+       else
+               kfree(lopt);
+}
+
+static inline struct listen_sock *reqsk_queue_yank_listen_sk(
+               struct request_sock_queue *queue)
+{
+       struct listen_sock *lopt;
+
+       write_lock_bh(&queue->syn_wait_lock);
+       lopt = queue->listen_opt;
+       queue->listen_opt = NULL;
+       write_unlock_bh(&queue->syn_wait_lock);
+
+       return lopt;
+}
 
 void reqsk_queue_destroy(struct request_sock_queue *queue)
 {
@@ -99,4 +130,3 @@ void reqsk_queue_destroy(struct request_sock_queue *queue)
                kfree(lopt);
 }
 
-EXPORT_SYMBOL(reqsk_queue_destroy);