@@ -176,10 +176,14 @@ struct neigh_ops {
176
176
};
177
177
178
178
struct pneigh_entry {
179
- struct pneigh_entry * next ;
179
+ struct pneigh_entry __rcu * next ;
180
180
possible_net_t net ;
181
181
struct net_device * dev ;
182
182
netdevice_tracker dev_tracker ;
183
+ union {
184
+ struct list_head free_node ;
185
+ struct rcu_head rcu ;
186
+ };
183
187
u32 flags ;
184
188
u8 protocol ;
185
189
bool permanent ;
@@ -236,7 +240,8 @@ struct neigh_table {
236
240
unsigned long last_rand ;
237
241
struct neigh_statistics __percpu * stats ;
238
242
struct neigh_hash_table __rcu * nht ;
239
- struct pneigh_entry * * phash_buckets ;
243
+ struct mutex phash_lock ;
244
+ struct pneigh_entry __rcu * * phash_buckets ;
240
245
};
241
246
242
247
static inline int neigh_parms_family (struct neigh_parms * p )
@@ -376,10 +381,10 @@ unsigned long neigh_rand_reach_time(unsigned long base);
376
381
void pneigh_enqueue (struct neigh_table * tbl , struct neigh_parms * p ,
377
382
struct sk_buff * skb );
378
383
struct pneigh_entry * pneigh_lookup (struct neigh_table * tbl , struct net * net ,
379
- const void * key , struct net_device * dev ,
380
- int creat );
381
- struct pneigh_entry * __pneigh_lookup ( struct neigh_table * tbl , struct net * net ,
382
- const void * key , struct net_device * dev );
384
+ const void * key , struct net_device * dev );
385
+ int pneigh_create ( struct neigh_table * tbl , struct net * net , const void * key ,
386
+ struct net_device * dev , u32 flags , u8 protocol ,
387
+ bool permanent );
383
388
int pneigh_delete (struct neigh_table * tbl , struct net * net , const void * key ,
384
389
struct net_device * dev );
385
390
0 commit comments