X25: Move qbit flag to bitfield
[safe/jmp/linux-2.6] / include / net / inetpeer.h
index 0965515..87b1df0 100644 (file)
@@ -1,8 +1,6 @@
 /*
  *             INETPEER - A storage for permanent information about peers
  *
- *  Version:   $Id: inetpeer.h,v 1.2 2002/01/12 07:54:56 davem Exp $
- *
  *  Authors:   Andrey V. Savochkin <saw@msu.ru>
  */
 
 #include <linux/spinlock.h>
 #include <asm/atomic.h>
 
-struct inet_peer
-{
+struct inet_peer {
+       /* group together avl_left,avl_right,v4daddr to speedup lookups */
        struct inet_peer        *avl_left, *avl_right;
-       struct inet_peer        *unused_next, **unused_prevp;
-       unsigned long           dtime;          /* the time of last use of not
+       __be32                  v4daddr;        /* peer's address */
+       __u32                   avl_height;
+       struct list_head        unused;
+       __u32                   dtime;          /* the time of last use of not
                                                 * referenced entries */
        atomic_t                refcnt;
-       __u32                   v4daddr;        /* peer's address */
-       __u16                   avl_height;
-       __u16                   ip_id_count;    /* IP ID for the next packet */
        atomic_t                rid;            /* Frag reception counter */
+       atomic_t                ip_id_count;    /* IP ID for the next packet */
        __u32                   tcp_ts;
-       unsigned long           tcp_ts_stamp;
+       __u32                   tcp_ts_stamp;
 };
 
 void                   inet_initpeers(void) __init;
 
 /* can be called with or without local BH being disabled */
-struct inet_peer       *inet_getpeer(__u32 daddr, int create);
+struct inet_peer       *inet_getpeer(__be32 daddr, int create);
 
-extern spinlock_t inet_peer_unused_lock;
-extern struct inet_peer **inet_peer_unused_tailp;
 /* can be called from BH context or outside */
-static inline void     inet_putpeer(struct inet_peer *p)
-{
-       spin_lock_bh(&inet_peer_unused_lock);
-       if (atomic_dec_and_test(&p->refcnt)) {
-               p->unused_prevp = inet_peer_unused_tailp;
-               p->unused_next = NULL;
-               *inet_peer_unused_tailp = p;
-               inet_peer_unused_tailp = &p->unused_next;
-               p->dtime = jiffies;
-       }
-       spin_unlock_bh(&inet_peer_unused_lock);
-}
+extern void inet_putpeer(struct inet_peer *p);
 
-extern spinlock_t inet_peer_idlock;
 /* can be called with or without local BH being disabled */
 static inline __u16    inet_getid(struct inet_peer *p, int more)
 {
-       __u16 id;
-
-       spin_lock_bh(&inet_peer_idlock);
-       id = p->ip_id_count;
-       p->ip_id_count += 1 + more;
-       spin_unlock_bh(&inet_peer_idlock);
-       return id;
+       more++;
+       return atomic_add_return(more, &p->ip_id_count) - more;
 }
 
 #endif /* _NET_INETPEER_H */