diff options
| author | David S. Miller <davem@nuts.davemloft.net> | 2004-09-14 00:11:23 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.davemloft.net> | 2004-09-14 00:11:23 -0700 |
| commit | 5c45fd0fa64855f01fdc165d343be48a85c93b1a (patch) | |
| tree | 48dce9a1bf05ef88b55c186b180a889e5d8a9976 | |
| parent | 2546ee7af6767092c3d702c1fa9d22226b0f3fb1 (diff) | |
[IPV4]: Use list.h facilities for fib_info_list.
Do not use a by-hand list implementation.
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | include/net/ip_fib.h | 3 | ||||
| -rw-r--r-- | net/ipv4/fib_semantics.c | 17 |
2 files changed, 5 insertions, 15 deletions
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 59825c399e15..3c49b4d9bfd4 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h @@ -62,8 +62,7 @@ struct fib_nh struct fib_info { - struct fib_info *fib_next; - struct fib_info *fib_prev; + struct list_head fib_list; int fib_treeref; atomic_t fib_clntref; int fib_dead; diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index 51191971eb12..68e82ea22275 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c @@ -45,12 +45,12 @@ #define FSprintk(a...) -static struct fib_info *fib_info_list; +static struct list_head fib_info_list = LIST_HEAD_INIT(fib_info_list); static rwlock_t fib_info_lock = RW_LOCK_UNLOCKED; int fib_info_cnt; #define for_fib_info() { struct fib_info *fi; \ - for (fi = fib_info_list; fi; fi = fi->fib_next) + list_for_each_entry(fi, &fib_info_list, fib_list) #define endfor_fib_info() } @@ -156,12 +156,7 @@ void fib_release_info(struct fib_info *fi) { write_lock(&fib_info_lock); if (fi && --fi->fib_treeref == 0) { - if (fi->fib_next) - fi->fib_next->fib_prev = fi->fib_prev; - if (fi->fib_prev) - fi->fib_prev->fib_next = fi->fib_next; - if (fi == fib_info_list) - fib_info_list = fi->fib_next; + list_del(&fi->fib_list); fi->fib_dead = 1; fib_info_put(fi); } @@ -581,11 +576,7 @@ link_it: fi->fib_treeref++; atomic_inc(&fi->fib_clntref); write_lock(&fib_info_lock); - fi->fib_next = fib_info_list; - fi->fib_prev = NULL; - if (fib_info_list) - fib_info_list->fib_prev = fi; - fib_info_list = fi; + list_add(&fi->fib_list, &fib_info_list); write_unlock(&fib_info_lock); return fi; |
