aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2006-05-28 02:03:58 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-06-18 00:28:37 -0400
commit546be2405be119ef55467aace45f337a16e5d424 (patch)
tree9b09f0041f9f82a20ab25ace3c7360e4a4b7989f /include/net
parent9cb3528cdbffc513eb9fb8faa45d41e397355830 (diff)
[IPSEC] xfrm: Undo afinfo lock proliferation
The number of locks used to manage afinfo structures can easily be reduced down to one each for policy and state respectively. This is based on the observation that the write locks are only held by module insertion/removal which are very rare events so there is no need to further differentiate between the insertion of modules like ipv6 versus esp6. The removal of the read locks in xfrm4_policy.c/xfrm6_policy.c might look suspicious at first. However, after you realise that nobody ever takes the corresponding write lock you'll feel better :) As far as I can gather it's an attempt to guard against the removal of the corresponding modules. Since neither module can be unloaded at all we can leave it to whoever fixes up IPv6 unloading :) Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/xfrm.h9
1 files changed, 1 insertions, 8 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index afa508d92c93..ed7c9747059d 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -204,8 +204,7 @@ struct xfrm_type;
204struct xfrm_dst; 204struct xfrm_dst;
205struct xfrm_policy_afinfo { 205struct xfrm_policy_afinfo {
206 unsigned short family; 206 unsigned short family;
207 rwlock_t lock; 207 struct xfrm_type *type_map[256];
208 struct xfrm_type_map *type_map;
209 struct dst_ops *dst_ops; 208 struct dst_ops *dst_ops;
210 void (*garbage_collect)(void); 209 void (*garbage_collect)(void);
211 int (*dst_lookup)(struct xfrm_dst **dst, struct flowi *fl); 210 int (*dst_lookup)(struct xfrm_dst **dst, struct flowi *fl);
@@ -232,7 +231,6 @@ extern int __xfrm_state_delete(struct xfrm_state *x);
232 231
233struct xfrm_state_afinfo { 232struct xfrm_state_afinfo {
234 unsigned short family; 233 unsigned short family;
235 rwlock_t lock;
236 struct list_head *state_bydst; 234 struct list_head *state_bydst;
237 struct list_head *state_byspi; 235 struct list_head *state_byspi;
238 int (*init_flags)(struct xfrm_state *x); 236 int (*init_flags)(struct xfrm_state *x);
@@ -264,11 +262,6 @@ struct xfrm_type
264 u32 (*get_max_size)(struct xfrm_state *, int size); 262 u32 (*get_max_size)(struct xfrm_state *, int size);
265}; 263};
266 264
267struct xfrm_type_map {
268 rwlock_t lock;
269 struct xfrm_type *map[256];
270};
271
272extern int xfrm_register_type(struct xfrm_type *type, unsigned short family); 265extern int xfrm_register_type(struct xfrm_type *type, unsigned short family);
273extern int xfrm_unregister_type(struct xfrm_type *type, unsigned short family); 266extern int xfrm_unregister_type(struct xfrm_type *type, unsigned short family);
274extern struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family); 267extern struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family);