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

Commit 9bbac6a9 authored by Hans Schillstrom's avatar Hans Schillstrom Committed by Simon Horman
Browse files

IPVS: netns, common protocol changes and use of appcnt.



appcnt and timeout_table moved from struct ip_vs_protocol to
ip_vs proto_data.

struct net *net added as first param to
 - register_app()
 - unregister_app()
 - app_conn_bind()
 - ip_vs_conn_new()

[horms@verge.net.au: removed cosmetic-change-only hunk]
Signed-off-by: default avatarHans Schillstrom <hans.schillstrom@ericsson.com>
Acked-by: default avatarJulian Anastasov <ja@ssi.bg>
Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
parent 9330419d
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -360,8 +360,6 @@ struct ip_vs_protocol {
	u16			protocol;
	u16			protocol;
	u16			num_states;
	u16			num_states;
	int			dont_defrag;
	int			dont_defrag;
	atomic_t		appcnt;		/* counter of proto app incs */
	int			*timeout_table;	/* protocol timeout table */


	void (*init)(struct ip_vs_protocol *pp);
	void (*init)(struct ip_vs_protocol *pp);


+3 −3
Original line number Original line Diff line number Diff line
@@ -804,7 +804,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p,
	       struct ip_vs_dest *dest, __u32 fwmark)
	       struct ip_vs_dest *dest, __u32 fwmark)
{
{
	struct ip_vs_conn *cp;
	struct ip_vs_conn *cp;
	struct ip_vs_protocol *pp = ip_vs_proto_get(p->protocol);
	struct ip_vs_proto_data *pd = ip_vs_proto_data_get(&init_net, p->protocol);


	cp = kmem_cache_zalloc(ip_vs_conn_cachep, GFP_ATOMIC);
	cp = kmem_cache_zalloc(ip_vs_conn_cachep, GFP_ATOMIC);
	if (cp == NULL) {
	if (cp == NULL) {
@@ -863,8 +863,8 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p,
#endif
#endif
		ip_vs_bind_xmit(cp);
		ip_vs_bind_xmit(cp);


	if (unlikely(pp && atomic_read(&pp->appcnt)))
	if (unlikely(pd && atomic_read(&pd->appcnt)))
		ip_vs_bind_app(cp, pp);
		ip_vs_bind_app(cp, pd->pp);


	/*
	/*
	 * Allow conntrack to be preserved. By default, conntrack
	 * Allow conntrack to be preserved. By default, conntrack
+2 −2
Original line number Original line Diff line number Diff line
@@ -1035,7 +1035,7 @@ static int sctp_register_app(struct ip_vs_app *inc)
		}
		}
	}
	}
	list_add(&inc->p_list, &ipvs->sctp_apps[hash]);
	list_add(&inc->p_list, &ipvs->sctp_apps[hash]);
	atomic_inc(&pd->pp->appcnt);
	atomic_inc(&pd->appcnt);
out:
out:
	spin_unlock_bh(&ipvs->sctp_app_lock);
	spin_unlock_bh(&ipvs->sctp_app_lock);


@@ -1048,7 +1048,7 @@ static void sctp_unregister_app(struct ip_vs_app *inc)
	struct ip_vs_proto_data *pd = ip_vs_proto_data_get(&init_net, IPPROTO_SCTP);
	struct ip_vs_proto_data *pd = ip_vs_proto_data_get(&init_net, IPPROTO_SCTP);


	spin_lock_bh(&ipvs->sctp_app_lock);
	spin_lock_bh(&ipvs->sctp_app_lock);
	atomic_dec(&pd->pp->appcnt);
	atomic_dec(&pd->appcnt);
	list_del(&inc->p_list);
	list_del(&inc->p_list);
	spin_unlock_bh(&ipvs->sctp_app_lock);
	spin_unlock_bh(&ipvs->sctp_app_lock);
}
}
+2 −3
Original line number Original line Diff line number Diff line
@@ -596,7 +596,7 @@ static int tcp_register_app(struct ip_vs_app *inc)
		}
		}
	}
	}
	list_add(&inc->p_list, &ipvs->tcp_apps[hash]);
	list_add(&inc->p_list, &ipvs->tcp_apps[hash]);
	atomic_inc(&pd->pp->appcnt);
	atomic_inc(&pd->appcnt);


  out:
  out:
	spin_unlock_bh(&ipvs->tcp_app_lock);
	spin_unlock_bh(&ipvs->tcp_app_lock);
@@ -611,7 +611,7 @@ tcp_unregister_app(struct ip_vs_app *inc)
	struct ip_vs_proto_data *pd = ip_vs_proto_data_get(&init_net, IPPROTO_TCP);
	struct ip_vs_proto_data *pd = ip_vs_proto_data_get(&init_net, IPPROTO_TCP);


	spin_lock_bh(&ipvs->tcp_app_lock);
	spin_lock_bh(&ipvs->tcp_app_lock);
	atomic_dec(&pd->pp->appcnt);
	atomic_dec(&pd->appcnt);
	list_del(&inc->p_list);
	list_del(&inc->p_list);
	spin_unlock_bh(&ipvs->tcp_app_lock);
	spin_unlock_bh(&ipvs->tcp_app_lock);
}
}
@@ -701,7 +701,6 @@ struct ip_vs_protocol ip_vs_protocol_tcp = {
	.protocol =		IPPROTO_TCP,
	.protocol =		IPPROTO_TCP,
	.num_states =		IP_VS_TCP_S_LAST,
	.num_states =		IP_VS_TCP_S_LAST,
	.dont_defrag =		0,
	.dont_defrag =		0,
	.appcnt =		ATOMIC_INIT(0),
	.init =			NULL,
	.init =			NULL,
	.exit =			NULL,
	.exit =			NULL,
	.init_netns =		__ip_vs_tcp_init,
	.init_netns =		__ip_vs_tcp_init,
+2 −2
Original line number Original line Diff line number Diff line
@@ -373,7 +373,7 @@ static int udp_register_app(struct ip_vs_app *inc)
		}
		}
	}
	}
	list_add(&inc->p_list, &ipvs->udp_apps[hash]);
	list_add(&inc->p_list, &ipvs->udp_apps[hash]);
	atomic_inc(&pd->pp->appcnt);
	atomic_inc(&pd->appcnt);


  out:
  out:
	spin_unlock_bh(&ipvs->udp_app_lock);
	spin_unlock_bh(&ipvs->udp_app_lock);
@@ -388,7 +388,7 @@ udp_unregister_app(struct ip_vs_app *inc)
	struct netns_ipvs *ipvs = net_ipvs(&init_net);
	struct netns_ipvs *ipvs = net_ipvs(&init_net);


	spin_lock_bh(&ipvs->udp_app_lock);
	spin_lock_bh(&ipvs->udp_app_lock);
	atomic_dec(&pd->pp->appcnt);
	atomic_dec(&pd->appcnt);
	list_del(&inc->p_list);
	list_del(&inc->p_list);
	spin_unlock_bh(&ipvs->udp_app_lock);
	spin_unlock_bh(&ipvs->udp_app_lock);
}
}
Loading