summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.davemloft.net>2004-09-14 00:11:23 -0700
committerDavid S. Miller <davem@nuts.davemloft.net>2004-09-14 00:11:23 -0700
commit5c45fd0fa64855f01fdc165d343be48a85c93b1a (patch)
tree48dce9a1bf05ef88b55c186b180a889e5d8a9976
parent2546ee7af6767092c3d702c1fa9d22226b0f3fb1 (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.h3
-rw-r--r--net/ipv4/fib_semantics.c17
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;