]> err.no Git - linux-2.6/blobdiff - include/net/request_sock.h
[PATCH] include/asm-arm26/hardirq.h: remove #define irq_enter()
[linux-2.6] / include / net / request_sock.h
index 38943ed04e73483268b2bc9b7cf0afd96a52ade3..b52cc52ffe39f1475488c0d904753519a6df531f 100644 (file)
@@ -78,17 +78,18 @@ static inline void reqsk_free(struct request_sock *req)
 
 extern int sysctl_max_syn_backlog;
 
-/** struct tcp_listen_opt - listen state
+/** struct listen_sock - listen state
  *
  * @max_qlen_log - log_2 of maximal queued SYNs/REQUESTs
  */
-struct tcp_listen_opt {
+struct listen_sock {
        u8                      max_qlen_log;
        /* 3 bytes hole, try to use */
        int                     qlen;
        int                     qlen_young;
        int                     clock_hand;
        u32                     hash_rnd;
+       u32                     nr_table_entries;
        struct request_sock     *syn_table[0];
 };
 
@@ -96,6 +97,7 @@ struct tcp_listen_opt {
  *
  * @rskq_accept_head - FIFO head of established children
  * @rskq_accept_tail - FIFO tail of established children
+ * @rskq_defer_accept - User waits for some data after accept()
  * @syn_wait_lock - serializer
  *
  * %syn_wait_lock is necessary only to avoid proc interface having to grab the main
@@ -111,15 +113,17 @@ struct request_sock_queue {
        struct request_sock     *rskq_accept_head;
        struct request_sock     *rskq_accept_tail;
        rwlock_t                syn_wait_lock;
-       struct tcp_listen_opt   *listen_opt;
+       u8                      rskq_defer_accept;
+       /* 3 bytes hole, try to pack */
+       struct listen_sock      *listen_opt;
 };
 
 extern int reqsk_queue_alloc(struct request_sock_queue *queue,
                             const int nr_table_entries);
 
-static inline struct tcp_listen_opt *reqsk_queue_yank_listen_sk(struct request_sock_queue *queue)
+static inline struct listen_sock *reqsk_queue_yank_listen_sk(struct request_sock_queue *queue)
 {
-       struct tcp_listen_opt *lopt;
+       struct listen_sock *lopt;
 
        write_lock_bh(&queue->syn_wait_lock);
        lopt = queue->listen_opt;
@@ -129,11 +133,13 @@ static inline struct tcp_listen_opt *reqsk_queue_yank_listen_sk(struct request_s
        return lopt;
 }
 
-static inline void reqsk_queue_destroy(struct request_sock_queue *queue)
+static inline void __reqsk_queue_destroy(struct request_sock_queue *queue)
 {
        kfree(reqsk_queue_yank_listen_sk(queue));
 }
 
+extern void reqsk_queue_destroy(struct request_sock_queue *queue);
+
 static inline struct request_sock *
        reqsk_queue_yank_acceptq(struct request_sock_queue *queue)
 {
@@ -203,7 +209,7 @@ static inline struct sock *reqsk_queue_get_child(struct request_sock_queue *queu
 static inline int reqsk_queue_removed(struct request_sock_queue *queue,
                                      struct request_sock *req)
 {
-       struct tcp_listen_opt *lopt = queue->listen_opt;
+       struct listen_sock *lopt = queue->listen_opt;
 
        if (req->retrans == 0)
                --lopt->qlen_young;
@@ -213,7 +219,7 @@ static inline int reqsk_queue_removed(struct request_sock_queue *queue,
 
 static inline int reqsk_queue_added(struct request_sock_queue *queue)
 {
-       struct tcp_listen_opt *lopt = queue->listen_opt;
+       struct listen_sock *lopt = queue->listen_opt;
        const int prev_qlen = lopt->qlen;
 
        lopt->qlen_young++;
@@ -221,17 +227,17 @@ static inline int reqsk_queue_added(struct request_sock_queue *queue)
        return prev_qlen;
 }
 
-static inline int reqsk_queue_len(struct request_sock_queue *queue)
+static inline int reqsk_queue_len(const struct request_sock_queue *queue)
 {
        return queue->listen_opt != NULL ? queue->listen_opt->qlen : 0;
 }
 
-static inline int reqsk_queue_len_young(struct request_sock_queue *queue)
+static inline int reqsk_queue_len_young(const struct request_sock_queue *queue)
 {
        return queue->listen_opt->qlen_young;
 }
 
-static inline int reqsk_queue_is_full(struct request_sock_queue *queue)
+static inline int reqsk_queue_is_full(const struct request_sock_queue *queue)
 {
        return queue->listen_opt->qlen >> queue->listen_opt->max_qlen_log;
 }
@@ -240,7 +246,7 @@ static inline void reqsk_queue_hash_req(struct request_sock_queue *queue,
                                        u32 hash, struct request_sock *req,
                                        unsigned timeout)
 {
-       struct tcp_listen_opt *lopt = queue->listen_opt;
+       struct listen_sock *lopt = queue->listen_opt;
 
        req->expires = jiffies + timeout;
        req->retrans = 0;