Lines Matching refs:p
89 struct inet_peer *p, *n, *c; in inetpeer_gc_worker() local
99 list_for_each_entry_safe(p, n, &list, gc_list) { in inetpeer_gc_worker()
104 c = rcu_dereference_protected(p->avl_left, 1); in inetpeer_gc_worker()
107 p->avl_left = peer_avl_empty_rcu; in inetpeer_gc_worker()
110 c = rcu_dereference_protected(p->avl_right, 1); in inetpeer_gc_worker()
113 p->avl_right = peer_avl_empty_rcu; in inetpeer_gc_worker()
116 n = list_entry(p->gc_list.next, struct inet_peer, gc_list); in inetpeer_gc_worker()
118 if (!atomic_read(&p->refcnt)) { in inetpeer_gc_worker()
119 list_del(&p->gc_list); in inetpeer_gc_worker()
120 kmem_cache_free(peer_cachep, p); in inetpeer_gc_worker()
334 static void unlink_from_pool(struct inet_peer *p, struct inet_peer_base *base, in unlink_from_pool() argument
339 if (lookup(&p->daddr, stack, base) != p) in unlink_from_pool()
342 if (p->avl_left == peer_avl_empty_rcu) { in unlink_from_pool()
343 *delp[0] = p->avl_right; in unlink_from_pool()
348 t = lookup_rightempty(p, base); in unlink_from_pool()
355 t->avl_left = p->avl_left; in unlink_from_pool()
356 t->avl_right = p->avl_right; in unlink_from_pool()
357 t->avl_height = p->avl_height; in unlink_from_pool()
358 BUG_ON(delp[1] != &p->avl_left); in unlink_from_pool()
363 call_rcu(&p->rcu, inetpeer_free_rcu); in unlink_from_pool()
371 struct inet_peer *p, *gchead = NULL; in inet_peer_gc() local
384 p = rcu_deref_locked(**stackptr, base); in inet_peer_gc()
385 if (atomic_read(&p->refcnt) == 0) { in inet_peer_gc()
387 delta = (__u32)jiffies - p->dtime; in inet_peer_gc()
389 atomic_cmpxchg(&p->refcnt, 0, -1) == 0) { in inet_peer_gc()
390 p->gc_next = gchead; in inet_peer_gc()
391 gchead = p; in inet_peer_gc()
395 while ((p = gchead) != NULL) { in inet_peer_gc()
396 gchead = p->gc_next; in inet_peer_gc()
398 unlink_from_pool(p, base, stack); in inet_peer_gc()
408 struct inet_peer *p; in inet_getpeer() local
417 p = lookup_rcu(daddr, base); in inet_getpeer()
421 if (p) in inet_getpeer()
422 return p; in inet_getpeer()
433 p = lookup(daddr, stack, base); in inet_getpeer()
434 if (p != peer_avl_empty) { in inet_getpeer()
435 atomic_inc(&p->refcnt); in inet_getpeer()
437 return p; in inet_getpeer()
444 p = create ? kmem_cache_alloc(peer_cachep, GFP_ATOMIC) : NULL; in inet_getpeer()
445 if (p) { in inet_getpeer()
446 p->daddr = *daddr; in inet_getpeer()
447 atomic_set(&p->refcnt, 1); in inet_getpeer()
448 atomic_set(&p->rid, 0); in inet_getpeer()
449 p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW; in inet_getpeer()
450 p->rate_tokens = 0; in inet_getpeer()
451 p->n_redirects = 0; in inet_getpeer()
455 p->rate_last = jiffies - 60*HZ; in inet_getpeer()
456 INIT_LIST_HEAD(&p->gc_list); in inet_getpeer()
459 link_to_pool(p, base); in inet_getpeer()
464 return p; in inet_getpeer()
468 void inet_putpeer(struct inet_peer *p) in inet_putpeer() argument
470 p->dtime = (__u32)jiffies; in inet_putpeer()
472 atomic_dec(&p->refcnt); in inet_putpeer()
519 struct inet_peer *p = container_of(head, struct inet_peer, gc_rcu); in inetpeer_inval_rcu() local
522 list_add_tail(&p->gc_list, &gc_list); in inetpeer_inval_rcu()