Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b534ecf1 authored by David S. Miller's avatar David S. Miller
Browse files

inetpeer: Make inet_getpeer() take an inet_peer_adress_t pointer.



And make an inet_getpeer_v4() helper, update callers.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 582a72da
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -50,7 +50,16 @@ struct inet_peer {
void			inet_initpeers(void) __init;
void			inet_initpeers(void) __init;


/* can be called with or without local BH being disabled */
/* can be called with or without local BH being disabled */
struct inet_peer	*inet_getpeer(__be32 daddr, int create);
struct inet_peer	*inet_getpeer(inet_peer_address_t *daddr, int create);

static inline struct inet_peer *inet_getpeer_v4(__be32 v4daddr, int create)
{
	inet_peer_address_t daddr;

	daddr.a4 = v4daddr;
	daddr.family = AF_INET;
	return inet_getpeer(&daddr, create);
}


/* can be called from BH context or outside */
/* can be called from BH context or outside */
extern void inet_putpeer(struct inet_peer *p);
extern void inet_putpeer(struct inet_peer *p);
+5 −5
Original line number Original line Diff line number Diff line
@@ -444,7 +444,7 @@ static struct inet_peer_base *family_to_base(int family)
}
}


/* Called with or without local BH being disabled. */
/* Called with or without local BH being disabled. */
struct inet_peer *inet_getpeer(__be32 daddr, int create)
struct inet_peer *inet_getpeer(inet_peer_address_t *daddr, int create)
{
{
	struct inet_peer __rcu **stack[PEER_MAXDEPTH], ***stackptr;
	struct inet_peer __rcu **stack[PEER_MAXDEPTH], ***stackptr;
	struct inet_peer_base *base = family_to_base(AF_INET);
	struct inet_peer_base *base = family_to_base(AF_INET);
@@ -454,7 +454,7 @@ struct inet_peer *inet_getpeer(__be32 daddr, int create)
	 * Because of a concurrent writer, we might not find an existing entry.
	 * Because of a concurrent writer, we might not find an existing entry.
	 */
	 */
	rcu_read_lock_bh();
	rcu_read_lock_bh();
	p = lookup_rcu_bh(daddr, base);
	p = lookup_rcu_bh(daddr->a4, base);
	rcu_read_unlock_bh();
	rcu_read_unlock_bh();


	if (p) {
	if (p) {
@@ -469,7 +469,7 @@ struct inet_peer *inet_getpeer(__be32 daddr, int create)
	 * At least, nodes should be hot in our cache.
	 * At least, nodes should be hot in our cache.
	 */
	 */
	spin_lock_bh(&base->lock);
	spin_lock_bh(&base->lock);
	p = lookup(daddr, stack, base);
	p = lookup(daddr->a4, stack, base);
	if (p != peer_avl_empty) {
	if (p != peer_avl_empty) {
		atomic_inc(&p->refcnt);
		atomic_inc(&p->refcnt);
		spin_unlock_bh(&base->lock);
		spin_unlock_bh(&base->lock);
@@ -479,10 +479,10 @@ struct inet_peer *inet_getpeer(__be32 daddr, int create)
	}
	}
	p = create ? kmem_cache_alloc(peer_cachep, GFP_ATOMIC) : NULL;
	p = create ? kmem_cache_alloc(peer_cachep, GFP_ATOMIC) : NULL;
	if (p) {
	if (p) {
		p->daddr.a4 = daddr;
		p->daddr = *daddr;
		atomic_set(&p->refcnt, 1);
		atomic_set(&p->refcnt, 1);
		atomic_set(&p->rid, 0);
		atomic_set(&p->rid, 0);
		atomic_set(&p->ip_id_count, secure_ip_id(daddr));
		atomic_set(&p->ip_id_count, secure_ip_id(daddr->a4));
		p->tcp_ts_stamp = 0;
		p->tcp_ts_stamp = 0;
		INIT_LIST_HEAD(&p->unused);
		INIT_LIST_HEAD(&p->unused);


+1 −1
Original line number Original line Diff line number Diff line
@@ -141,7 +141,7 @@ static void ip4_frag_init(struct inet_frag_queue *q, void *a)
	qp->daddr = arg->iph->daddr;
	qp->daddr = arg->iph->daddr;
	qp->user = arg->user;
	qp->user = arg->user;
	qp->peer = sysctl_ipfrag_max_dist ?
	qp->peer = sysctl_ipfrag_max_dist ?
		inet_getpeer(arg->iph->saddr, 1) : NULL;
		inet_getpeer_v4(arg->iph->saddr, 1) : NULL;
}
}


static __inline__ void ip4_frag_free(struct inet_frag_queue *q)
static __inline__ void ip4_frag_free(struct inet_frag_queue *q)
+1 −1
Original line number Original line Diff line number Diff line
@@ -1289,7 +1289,7 @@ void rt_bind_peer(struct rtable *rt, int create)
{
{
	struct inet_peer *peer;
	struct inet_peer *peer;


	peer = inet_getpeer(rt->rt_dst, create);
	peer = inet_getpeer_v4(rt->rt_dst, create);


	if (peer && cmpxchg(&rt->peer, NULL, peer) != NULL)
	if (peer && cmpxchg(&rt->peer, NULL, peer) != NULL)
		inet_putpeer(peer);
		inet_putpeer(peer);
+2 −2
Original line number Original line Diff line number Diff line
@@ -1778,7 +1778,7 @@ int tcp_v4_remember_stamp(struct sock *sk)
	int release_it = 0;
	int release_it = 0;


	if (!rt || rt->rt_dst != inet->inet_daddr) {
	if (!rt || rt->rt_dst != inet->inet_daddr) {
		peer = inet_getpeer(inet->inet_daddr, 1);
		peer = inet_getpeer_v4(inet->inet_daddr, 1);
		release_it = 1;
		release_it = 1;
	} else {
	} else {
		if (!rt->peer)
		if (!rt->peer)
@@ -1804,7 +1804,7 @@ EXPORT_SYMBOL(tcp_v4_remember_stamp);


int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw)
int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw)
{
{
	struct inet_peer *peer = inet_getpeer(tw->tw_daddr, 1);
	struct inet_peer *peer = inet_getpeer_v4(tw->tw_daddr, 1);


	if (peer) {
	if (peer) {
		const struct tcp_timewait_sock *tcptw = tcp_twsk((struct sock *)tw);
		const struct tcp_timewait_sock *tcptw = tcp_twsk((struct sock *)tw);