Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[safe/jmp/linux-2.6] / include / net / inet_frag.h
index 8ab6df6..39f2dc9 100644 (file)
@@ -2,6 +2,14 @@
 #define __NET_FRAG_H__
 
 struct netns_frags {
+       int                     nqueues;
+       atomic_t                mem;
+       struct list_head        lru_list;
+
+       /* sysctls */
+       int                     timeout;
+       int                     high_thresh;
+       int                     low_thresh;
 };
 
 struct inet_frag_queue {
@@ -17,30 +25,20 @@ struct inet_frag_queue {
        int                     meat;
        __u8                    last_in;    /* first/last segment arrived? */
 
-#define COMPLETE               4
-#define FIRST_IN               2
-#define LAST_IN                        1
+#define INET_FRAG_COMPLETE     4
+#define INET_FRAG_FIRST_IN     2
+#define INET_FRAG_LAST_IN      1
 };
 
 #define INETFRAGS_HASHSZ               64
 
-struct inet_frags_ctl {
-       int high_thresh;
-       int low_thresh;
-       int timeout;
-       int secret_interval;
-};
-
 struct inet_frags {
-       struct list_head        lru_list;
        struct hlist_head       hash[INETFRAGS_HASHSZ];
        rwlock_t                lock;
        u32                     rnd;
-       int                     nqueues;
        int                     qsize;
-       atomic_t                mem;
+       int                     secret_interval;
        struct timer_list       secret_timer;
-       struct inet_frags_ctl   *ctl;
 
        unsigned int            (*hashfn)(struct inet_frag_queue *);
        void                    (*constructor)(struct inet_frag_queue *q,
@@ -55,12 +53,16 @@ struct inet_frags {
 void inet_frags_init(struct inet_frags *);
 void inet_frags_fini(struct inet_frags *);
 
+void inet_frags_init_net(struct netns_frags *nf);
+void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f);
+
 void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
 void inet_frag_destroy(struct inet_frag_queue *q,
                                struct inet_frags *f, int *work);
-int inet_frag_evictor(struct inet_frags *f);
+int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f);
 struct inet_frag_queue *inet_frag_find(struct netns_frags *nf,
-               struct inet_frags *f, void *key, unsigned int hash);
+               struct inet_frags *f, void *key, unsigned int hash)
+       __releases(&f->lock);
 
 static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f)
 {