netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT] Please pull updates for IPVS
@ 2008-08-11 21:46 Sven Wegener
  2008-08-12  1:10 ` David Miller
  0 siblings, 1 reply; 20+ messages in thread
From: Sven Wegener @ 2008-08-11 21:46 UTC (permalink / raw)
  To: davem; +Cc: lvs-devel, netdev, horms

Hi Dave,

I have a couple of updates for IPVS pending. The patches have been
posted to the mailing-list and acked by Simon Horman, so I thought it's
ok to send you a pull request for them, if that's ok with you.

Mostly trivial cleanups. Two potential deadlock fixes, one introduced by
my last sync daemon changes and one in the estimator code, which is
going back for years. The other estimator change is the biggest one. If
you have an issue with something, just holler and I'll get on it. I'll
append an overall diff as it's not that big.

Thanks!

The following changes since commit 8123b421e8ed944671d7241323ed3198cccb4041:
  David S. Miller (1):
        pkt_sched: Fix ingress deletion and filter attachment.

are available in the git repository at:

  git://git.stealer.net/linux-2.6.git stealer/ipvs/for-davem

Simon Horman (1):
      ipvs: Explictly clear ip_vs_stats members

Sven Wegener (9):
      ipvs: Fix possible deadlock in sync code
      ipvs: Fix possible deadlock in estimator code
      ipvs: Use ARRAY_SIZE()
      ipvs: Use list_empty() instead of open-coding the same functionality
      ipvs: Initialize schedulers' struct list_head at compile time
      ipvs: Annotate init functions with __init
      ipvs: Mark net_vs_ctl_path const
      ipvs: Embed estimator object into stats object
      ipvs: No need to zero out ip_vs_stats during initialization

 include/net/ip_vs.h         |   32 ++++++++++--
 net/ipv4/ipvs/ip_vs_app.c   |    2 +-
 net/ipv4/ipvs/ip_vs_conn.c  |    2 +-
 net/ipv4/ipvs/ip_vs_ctl.c   |   27 +++++++---
 net/ipv4/ipvs/ip_vs_dh.c    |    2 +-
 net/ipv4/ipvs/ip_vs_est.c   |  116 ++++++++++++++----------------------------
 net/ipv4/ipvs/ip_vs_lblc.c  |    2 +-
 net/ipv4/ipvs/ip_vs_lblcr.c |    2 +-
 net/ipv4/ipvs/ip_vs_lc.c    |    2 +-
 net/ipv4/ipvs/ip_vs_nq.c    |    2 +-
 net/ipv4/ipvs/ip_vs_proto.c |    4 +-
 net/ipv4/ipvs/ip_vs_rr.c    |    2 +-
 net/ipv4/ipvs/ip_vs_sched.c |    4 +-
 net/ipv4/ipvs/ip_vs_sed.c   |    2 +-
 net/ipv4/ipvs/ip_vs_sh.c    |    2 +-
 net/ipv4/ipvs/ip_vs_sync.c  |    4 +-
 net/ipv4/ipvs/ip_vs_wlc.c   |    2 +-
 net/ipv4/ipvs/ip_vs_wrr.c   |    2 +-
 18 files changed, 105 insertions(+), 106 deletions(-)

diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index cbb59eb..7312c3d 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -140,8 +140,24 @@ struct ip_vs_seq {
 
 
 /*
- *	IPVS statistics object
+ *	IPVS statistics objects
  */
+struct ip_vs_estimator {
+	struct list_head	list;
+
+	u64			last_inbytes;
+	u64			last_outbytes;
+	u32			last_conns;
+	u32			last_inpkts;
+	u32			last_outpkts;
+
+	u32			cps;
+	u32			inpps;
+	u32			outpps;
+	u32			inbps;
+	u32			outbps;
+};
+
 struct ip_vs_stats
 {
 	__u32                   conns;          /* connections scheduled */
@@ -156,7 +172,15 @@ struct ip_vs_stats
 	__u32			inbps;		/* current in byte rate */
 	__u32			outbps;		/* current out byte rate */
 
+	/*
+	 * Don't add anything before the lock, because we use memcpy() to copy
+	 * the members before the lock to struct ip_vs_stats_user in
+	 * ip_vs_ctl.c.
+	 */
+
 	spinlock_t              lock;           /* spin lock */
+
+	struct ip_vs_estimator	est;		/* estimator */
 };
 
 struct dst_entry;
@@ -440,7 +464,7 @@ struct ip_vs_app
  */
 extern const char *ip_vs_proto_name(unsigned proto);
 extern void ip_vs_init_hash_table(struct list_head *table, int rows);
-#define IP_VS_INIT_HASH_TABLE(t) ip_vs_init_hash_table(t, sizeof(t)/sizeof(t[0]))
+#define IP_VS_INIT_HASH_TABLE(t) ip_vs_init_hash_table((t), ARRAY_SIZE((t)))
 
 #define IP_VS_APP_TYPE_FTP	1
 
@@ -620,7 +644,7 @@ extern int sysctl_ip_vs_expire_quiescent_template;
 extern int sysctl_ip_vs_sync_threshold[2];
 extern int sysctl_ip_vs_nat_icmp_send;
 extern struct ip_vs_stats ip_vs_stats;
-extern struct ctl_path net_vs_ctl_path[];
+extern const struct ctl_path net_vs_ctl_path[];
 
 extern struct ip_vs_service *
 ip_vs_service_get(__u32 fwmark, __u16 protocol, __be32 vaddr, __be16 vport);
@@ -659,7 +683,7 @@ extern void ip_vs_sync_conn(struct ip_vs_conn *cp);
 /*
  *      IPVS rate estimator prototypes (from ip_vs_est.c)
  */
-extern int ip_vs_new_estimator(struct ip_vs_stats *stats);
+extern void ip_vs_new_estimator(struct ip_vs_stats *stats);
 extern void ip_vs_kill_estimator(struct ip_vs_stats *stats);
 extern void ip_vs_zero_estimator(struct ip_vs_stats *stats);
 
diff --git a/net/ipv4/ipvs/ip_vs_app.c b/net/ipv4/ipvs/ip_vs_app.c
index 1f1897a..201b8ea 100644
--- a/net/ipv4/ipvs/ip_vs_app.c
+++ b/net/ipv4/ipvs/ip_vs_app.c
@@ -608,7 +608,7 @@ int ip_vs_skb_replace(struct sk_buff *skb, gfp_t pri,
 }
 
 
-int ip_vs_app_init(void)
+int __init ip_vs_app_init(void)
 {
 	/* we will replace it with proc_net_ipvs_create() soon */
 	proc_net_fops_create(&init_net, "ip_vs_app", 0, &ip_vs_app_fops);
diff --git a/net/ipv4/ipvs/ip_vs_conn.c b/net/ipv4/ipvs/ip_vs_conn.c
index f8bdae4..44a6872 100644
--- a/net/ipv4/ipvs/ip_vs_conn.c
+++ b/net/ipv4/ipvs/ip_vs_conn.c
@@ -965,7 +965,7 @@ static void ip_vs_conn_flush(void)
 }
 
 
-int ip_vs_conn_init(void)
+int __init ip_vs_conn_init(void)
 {
 	int idx;
 
diff --git a/net/ipv4/ipvs/ip_vs_ctl.c b/net/ipv4/ipvs/ip_vs_ctl.c
index 9a5ace0..6379705 100644
--- a/net/ipv4/ipvs/ip_vs_ctl.c
+++ b/net/ipv4/ipvs/ip_vs_ctl.c
@@ -683,9 +683,22 @@ static void
 ip_vs_zero_stats(struct ip_vs_stats *stats)
 {
 	spin_lock_bh(&stats->lock);
-	memset(stats, 0, (char *)&stats->lock - (char *)stats);
-	spin_unlock_bh(&stats->lock);
+
+	stats->conns = 0;
+	stats->inpkts = 0;
+	stats->outpkts = 0;
+	stats->inbytes = 0;
+	stats->outbytes = 0;
+
+	stats->cps = 0;
+	stats->inpps = 0;
+	stats->outpps = 0;
+	stats->inbps = 0;
+	stats->outbps = 0;
+
 	ip_vs_zero_estimator(stats);
+
+	spin_unlock_bh(&stats->lock);
 }
 
 /*
@@ -1589,7 +1602,7 @@ static struct ctl_table vs_vars[] = {
 	{ .ctl_name = 0 }
 };
 
-struct ctl_path net_vs_ctl_path[] = {
+const struct ctl_path net_vs_ctl_path[] = {
 	{ .procname = "net", .ctl_name = CTL_NET, },
 	{ .procname = "ipv4", .ctl_name = NET_IPV4, },
 	{ .procname = "vs", },
@@ -1784,7 +1797,9 @@ static const struct file_operations ip_vs_info_fops = {
 
 #endif
 
-struct ip_vs_stats ip_vs_stats;
+struct ip_vs_stats ip_vs_stats = {
+	.lock = __SPIN_LOCK_UNLOCKED(ip_vs_stats.lock),
+};
 
 #ifdef CONFIG_PROC_FS
 static int ip_vs_stats_show(struct seq_file *seq, void *v)
@@ -2306,7 +2321,7 @@ static struct nf_sockopt_ops ip_vs_sockopts = {
 };
 
 
-int ip_vs_control_init(void)
+int __init ip_vs_control_init(void)
 {
 	int ret;
 	int idx;
@@ -2333,8 +2348,6 @@ int ip_vs_control_init(void)
 		INIT_LIST_HEAD(&ip_vs_rtable[idx]);
 	}
 
-	memset(&ip_vs_stats, 0, sizeof(ip_vs_stats));
-	spin_lock_init(&ip_vs_stats.lock);
 	ip_vs_new_estimator(&ip_vs_stats);
 
 	/* Hook the defense timer */
diff --git a/net/ipv4/ipvs/ip_vs_dh.c b/net/ipv4/ipvs/ip_vs_dh.c
index 8afc150..fa66824 100644
--- a/net/ipv4/ipvs/ip_vs_dh.c
+++ b/net/ipv4/ipvs/ip_vs_dh.c
@@ -233,6 +233,7 @@ static struct ip_vs_scheduler ip_vs_dh_scheduler =
 	.name =			"dh",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_dh_scheduler.n_list),
 	.init_service =		ip_vs_dh_init_svc,
 	.done_service =		ip_vs_dh_done_svc,
 	.update_service =	ip_vs_dh_update_svc,
@@ -242,7 +243,6 @@ static struct ip_vs_scheduler ip_vs_dh_scheduler =
 
 static int __init ip_vs_dh_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_dh_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_dh_scheduler);
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_est.c b/net/ipv4/ipvs/ip_vs_est.c
index bc04eed..5a20f93 100644
--- a/net/ipv4/ipvs/ip_vs_est.c
+++ b/net/ipv4/ipvs/ip_vs_est.c
@@ -17,6 +17,7 @@
 #include <linux/types.h>
 #include <linux/interrupt.h>
 #include <linux/sysctl.h>
+#include <linux/list.h>
 
 #include <net/ip_vs.h>
 
@@ -44,28 +45,11 @@
  */
 
 
-struct ip_vs_estimator
-{
-	struct ip_vs_estimator	*next;
-	struct ip_vs_stats	*stats;
-
-	u32			last_conns;
-	u32			last_inpkts;
-	u32			last_outpkts;
-	u64			last_inbytes;
-	u64			last_outbytes;
-
-	u32			cps;
-	u32			inpps;
-	u32			outpps;
-	u32			inbps;
-	u32			outbps;
-};
-
+static void estimation_timer(unsigned long arg);
 
-static struct ip_vs_estimator *est_list = NULL;
-static DEFINE_RWLOCK(est_lock);
-static struct timer_list est_timer;
+static LIST_HEAD(est_list);
+static DEFINE_SPINLOCK(est_lock);
+static DEFINE_TIMER(est_timer, estimation_timer, 0, 0);
 
 static void estimation_timer(unsigned long arg)
 {
@@ -76,9 +60,9 @@ static void estimation_timer(unsigned long arg)
 	u64 n_inbytes, n_outbytes;
 	u32 rate;
 
-	read_lock(&est_lock);
-	for (e = est_list; e; e = e->next) {
-		s = e->stats;
+	spin_lock(&est_lock);
+	list_for_each_entry(e, &est_list, list) {
+		s = container_of(e, struct ip_vs_stats, est);
 
 		spin_lock(&s->lock);
 		n_conns = s->conns;
@@ -114,19 +98,16 @@ static void estimation_timer(unsigned long arg)
 		s->outbps = (e->outbps+0xF)>>5;
 		spin_unlock(&s->lock);
 	}
-	read_unlock(&est_lock);
+	spin_unlock(&est_lock);
 	mod_timer(&est_timer, jiffies + 2*HZ);
 }
 
-int ip_vs_new_estimator(struct ip_vs_stats *stats)
+void ip_vs_new_estimator(struct ip_vs_stats *stats)
 {
-	struct ip_vs_estimator *est;
+	struct ip_vs_estimator *est = &stats->est;
 
-	est = kzalloc(sizeof(*est), GFP_KERNEL);
-	if (est == NULL)
-		return -ENOMEM;
+	INIT_LIST_HEAD(&est->list);
 
-	est->stats = stats;
 	est->last_conns = stats->conns;
 	est->cps = stats->cps<<10;
 
@@ -142,59 +123,40 @@ int ip_vs_new_estimator(struct ip_vs_stats *stats)
 	est->last_outbytes = stats->outbytes;
 	est->outbps = stats->outbps<<5;
 
-	write_lock_bh(&est_lock);
-	est->next = est_list;
-	if (est->next == NULL) {
-		setup_timer(&est_timer, estimation_timer, 0);
-		est_timer.expires = jiffies + 2*HZ;
-		add_timer(&est_timer);
-	}
-	est_list = est;
-	write_unlock_bh(&est_lock);
-	return 0;
+	spin_lock_bh(&est_lock);
+	if (list_empty(&est_list))
+		mod_timer(&est_timer, jiffies + 2 * HZ);
+	list_add(&est->list, &est_list);
+	spin_unlock_bh(&est_lock);
 }
 
 void ip_vs_kill_estimator(struct ip_vs_stats *stats)
 {
-	struct ip_vs_estimator *est, **pest;
-	int killed = 0;
-
-	write_lock_bh(&est_lock);
-	pest = &est_list;
-	while ((est=*pest) != NULL) {
-		if (est->stats != stats) {
-			pest = &est->next;
-			continue;
-		}
-		*pest = est->next;
-		kfree(est);
-		killed++;
+	struct ip_vs_estimator *est = &stats->est;
+
+	spin_lock_bh(&est_lock);
+	list_del(&est->list);
+	while (list_empty(&est_list) && try_to_del_timer_sync(&est_timer) < 0) {
+		spin_unlock_bh(&est_lock);
+		cpu_relax();
+		spin_lock_bh(&est_lock);
 	}
-	if (killed && est_list == NULL)
-		del_timer_sync(&est_timer);
-	write_unlock_bh(&est_lock);
+	spin_unlock_bh(&est_lock);
 }
 
 void ip_vs_zero_estimator(struct ip_vs_stats *stats)
 {
-	struct ip_vs_estimator *e;
-
-	write_lock_bh(&est_lock);
-	for (e = est_list; e; e = e->next) {
-		if (e->stats != stats)
-			continue;
-
-		/* set counters zero */
-		e->last_conns = 0;
-		e->last_inpkts = 0;
-		e->last_outpkts = 0;
-		e->last_inbytes = 0;
-		e->last_outbytes = 0;
-		e->cps = 0;
-		e->inpps = 0;
-		e->outpps = 0;
-		e->inbps = 0;
-		e->outbps = 0;
-	}
-	write_unlock_bh(&est_lock);
+	struct ip_vs_estimator *est = &stats->est;
+
+	/* set counters zero, caller must hold the stats->lock lock */
+	est->last_inbytes = 0;
+	est->last_outbytes = 0;
+	est->last_conns = 0;
+	est->last_inpkts = 0;
+	est->last_outpkts = 0;
+	est->cps = 0;
+	est->inpps = 0;
+	est->outpps = 0;
+	est->inbps = 0;
+	est->outbps = 0;
 }
diff --git a/net/ipv4/ipvs/ip_vs_lblc.c b/net/ipv4/ipvs/ip_vs_lblc.c
index 0efa3db..7a6a319 100644
--- a/net/ipv4/ipvs/ip_vs_lblc.c
+++ b/net/ipv4/ipvs/ip_vs_lblc.c
@@ -539,6 +539,7 @@ static struct ip_vs_scheduler ip_vs_lblc_scheduler =
 	.name =			"lblc",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_lblc_scheduler.n_list),
 	.init_service =		ip_vs_lblc_init_svc,
 	.done_service =		ip_vs_lblc_done_svc,
 	.update_service =	ip_vs_lblc_update_svc,
@@ -550,7 +551,6 @@ static int __init ip_vs_lblc_init(void)
 {
 	int ret;
 
-	INIT_LIST_HEAD(&ip_vs_lblc_scheduler.n_list);
 	sysctl_header = register_sysctl_paths(net_vs_ctl_path, vs_vars_table);
 	ret = register_ip_vs_scheduler(&ip_vs_lblc_scheduler);
 	if (ret)
diff --git a/net/ipv4/ipvs/ip_vs_lblcr.c b/net/ipv4/ipvs/ip_vs_lblcr.c
index 8e3bbeb..c234e73 100644
--- a/net/ipv4/ipvs/ip_vs_lblcr.c
+++ b/net/ipv4/ipvs/ip_vs_lblcr.c
@@ -728,6 +728,7 @@ static struct ip_vs_scheduler ip_vs_lblcr_scheduler =
 	.name =			"lblcr",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_lblcr_scheduler.n_list),
 	.init_service =		ip_vs_lblcr_init_svc,
 	.done_service =		ip_vs_lblcr_done_svc,
 	.update_service =	ip_vs_lblcr_update_svc,
@@ -739,7 +740,6 @@ static int __init ip_vs_lblcr_init(void)
 {
 	int ret;
 
-	INIT_LIST_HEAD(&ip_vs_lblcr_scheduler.n_list);
 	sysctl_header = register_sysctl_paths(net_vs_ctl_path, vs_vars_table);
 	ret = register_ip_vs_scheduler(&ip_vs_lblcr_scheduler);
 	if (ret)
diff --git a/net/ipv4/ipvs/ip_vs_lc.c b/net/ipv4/ipvs/ip_vs_lc.c
index ac9f08e..ebcdbf7 100644
--- a/net/ipv4/ipvs/ip_vs_lc.c
+++ b/net/ipv4/ipvs/ip_vs_lc.c
@@ -98,6 +98,7 @@ static struct ip_vs_scheduler ip_vs_lc_scheduler = {
 	.name =			"lc",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_lc_scheduler.n_list),
 	.init_service =		ip_vs_lc_init_svc,
 	.done_service =		ip_vs_lc_done_svc,
 	.update_service =	ip_vs_lc_update_svc,
@@ -107,7 +108,6 @@ static struct ip_vs_scheduler ip_vs_lc_scheduler = {
 
 static int __init ip_vs_lc_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_lc_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_lc_scheduler) ;
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_nq.c b/net/ipv4/ipvs/ip_vs_nq.c
index a46bf25..92f3a67 100644
--- a/net/ipv4/ipvs/ip_vs_nq.c
+++ b/net/ipv4/ipvs/ip_vs_nq.c
@@ -136,6 +136,7 @@ static struct ip_vs_scheduler ip_vs_nq_scheduler =
 	.name =			"nq",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_nq_scheduler.n_list),
 	.init_service =		ip_vs_nq_init_svc,
 	.done_service =		ip_vs_nq_done_svc,
 	.update_service =	ip_vs_nq_update_svc,
@@ -145,7 +146,6 @@ static struct ip_vs_scheduler ip_vs_nq_scheduler =
 
 static int __init ip_vs_nq_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_nq_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_nq_scheduler);
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_proto.c b/net/ipv4/ipvs/ip_vs_proto.c
index 876714f..6099a88 100644
--- a/net/ipv4/ipvs/ip_vs_proto.c
+++ b/net/ipv4/ipvs/ip_vs_proto.c
@@ -43,7 +43,7 @@ static struct ip_vs_protocol *ip_vs_proto_table[IP_VS_PROTO_TAB_SIZE];
 /*
  *	register an ipvs protocol
  */
-static int __used register_ip_vs_protocol(struct ip_vs_protocol *pp)
+static int __used __init register_ip_vs_protocol(struct ip_vs_protocol *pp)
 {
 	unsigned hash = IP_VS_PROTO_HASH(pp->protocol);
 
@@ -190,7 +190,7 @@ ip_vs_tcpudp_debug_packet(struct ip_vs_protocol *pp,
 }
 
 
-int ip_vs_protocol_init(void)
+int __init ip_vs_protocol_init(void)
 {
 	char protocols[64];
 #define REGISTER_PROTOCOL(p)			\
diff --git a/net/ipv4/ipvs/ip_vs_rr.c b/net/ipv4/ipvs/ip_vs_rr.c
index c8db12d..358110d 100644
--- a/net/ipv4/ipvs/ip_vs_rr.c
+++ b/net/ipv4/ipvs/ip_vs_rr.c
@@ -94,6 +94,7 @@ static struct ip_vs_scheduler ip_vs_rr_scheduler = {
 	.name =			"rr",			/* name */
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_rr_scheduler.n_list),
 	.init_service =		ip_vs_rr_init_svc,
 	.done_service =		ip_vs_rr_done_svc,
 	.update_service =	ip_vs_rr_update_svc,
@@ -102,7 +103,6 @@ static struct ip_vs_scheduler ip_vs_rr_scheduler = {
 
 static int __init ip_vs_rr_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_rr_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_rr_scheduler);
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_sched.c b/net/ipv4/ipvs/ip_vs_sched.c
index b647673..a46ad9e 100644
--- a/net/ipv4/ipvs/ip_vs_sched.c
+++ b/net/ipv4/ipvs/ip_vs_sched.c
@@ -184,7 +184,7 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler)
 
 	write_lock_bh(&__ip_vs_sched_lock);
 
-	if (scheduler->n_list.next != &scheduler->n_list) {
+	if (!list_empty(&scheduler->n_list)) {
 		write_unlock_bh(&__ip_vs_sched_lock);
 		ip_vs_use_count_dec();
 		IP_VS_ERR("register_ip_vs_scheduler(): [%s] scheduler "
@@ -229,7 +229,7 @@ int unregister_ip_vs_scheduler(struct ip_vs_scheduler *scheduler)
 	}
 
 	write_lock_bh(&__ip_vs_sched_lock);
-	if (scheduler->n_list.next == &scheduler->n_list) {
+	if (list_empty(&scheduler->n_list)) {
 		write_unlock_bh(&__ip_vs_sched_lock);
 		IP_VS_ERR("unregister_ip_vs_scheduler(): [%s] scheduler "
 			  "is not in the list. failed\n", scheduler->name);
diff --git a/net/ipv4/ipvs/ip_vs_sed.c b/net/ipv4/ipvs/ip_vs_sed.c
index 2a7d313..77663d8 100644
--- a/net/ipv4/ipvs/ip_vs_sed.c
+++ b/net/ipv4/ipvs/ip_vs_sed.c
@@ -138,6 +138,7 @@ static struct ip_vs_scheduler ip_vs_sed_scheduler =
 	.name =			"sed",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_sed_scheduler.n_list),
 	.init_service =		ip_vs_sed_init_svc,
 	.done_service =		ip_vs_sed_done_svc,
 	.update_service =	ip_vs_sed_update_svc,
@@ -147,7 +148,6 @@ static struct ip_vs_scheduler ip_vs_sed_scheduler =
 
 static int __init ip_vs_sed_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_sed_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_sed_scheduler);
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_sh.c b/net/ipv4/ipvs/ip_vs_sh.c
index b8fdfac..7b979e2 100644
--- a/net/ipv4/ipvs/ip_vs_sh.c
+++ b/net/ipv4/ipvs/ip_vs_sh.c
@@ -230,6 +230,7 @@ static struct ip_vs_scheduler ip_vs_sh_scheduler =
 	.name =			"sh",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list	 =		LIST_HEAD_INIT(ip_vs_sh_scheduler.n_list),
 	.init_service =		ip_vs_sh_init_svc,
 	.done_service =		ip_vs_sh_done_svc,
 	.update_service =	ip_vs_sh_update_svc,
@@ -239,7 +240,6 @@ static struct ip_vs_scheduler ip_vs_sh_scheduler =
 
 static int __init ip_vs_sh_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_sh_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_sh_scheduler);
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c
index 45e9bd9..a652da2 100644
--- a/net/ipv4/ipvs/ip_vs_sync.c
+++ b/net/ipv4/ipvs/ip_vs_sync.c
@@ -904,9 +904,9 @@ int stop_sync_thread(int state)
 		 * progress of stopping the master sync daemon.
 		 */
 
-		spin_lock(&ip_vs_sync_lock);
+		spin_lock_bh(&ip_vs_sync_lock);
 		ip_vs_sync_state &= ~IP_VS_STATE_MASTER;
-		spin_unlock(&ip_vs_sync_lock);
+		spin_unlock_bh(&ip_vs_sync_lock);
 		kthread_stop(sync_master_thread);
 		sync_master_thread = NULL;
 	} else if (state == IP_VS_STATE_BACKUP) {
diff --git a/net/ipv4/ipvs/ip_vs_wlc.c b/net/ipv4/ipvs/ip_vs_wlc.c
index 772c3cb..9b0ef86 100644
--- a/net/ipv4/ipvs/ip_vs_wlc.c
+++ b/net/ipv4/ipvs/ip_vs_wlc.c
@@ -126,6 +126,7 @@ static struct ip_vs_scheduler ip_vs_wlc_scheduler =
 	.name =			"wlc",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_wlc_scheduler.n_list),
 	.init_service =		ip_vs_wlc_init_svc,
 	.done_service =		ip_vs_wlc_done_svc,
 	.update_service =	ip_vs_wlc_update_svc,
@@ -135,7 +136,6 @@ static struct ip_vs_scheduler ip_vs_wlc_scheduler =
 
 static int __init ip_vs_wlc_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_wlc_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_wlc_scheduler);
 }
 
diff --git a/net/ipv4/ipvs/ip_vs_wrr.c b/net/ipv4/ipvs/ip_vs_wrr.c
index 1d6932d..0d86a79 100644
--- a/net/ipv4/ipvs/ip_vs_wrr.c
+++ b/net/ipv4/ipvs/ip_vs_wrr.c
@@ -212,6 +212,7 @@ static struct ip_vs_scheduler ip_vs_wrr_scheduler = {
 	.name =			"wrr",
 	.refcnt =		ATOMIC_INIT(0),
 	.module =		THIS_MODULE,
+	.n_list =		LIST_HEAD_INIT(ip_vs_wrr_scheduler.n_list),
 	.init_service =		ip_vs_wrr_init_svc,
 	.done_service =		ip_vs_wrr_done_svc,
 	.update_service =	ip_vs_wrr_update_svc,
@@ -220,7 +221,6 @@ static struct ip_vs_scheduler ip_vs_wrr_scheduler = {
 
 static int __init ip_vs_wrr_init(void)
 {
-	INIT_LIST_HEAD(&ip_vs_wrr_scheduler.n_list);
 	return register_ip_vs_scheduler(&ip_vs_wrr_scheduler) ;
 }
 

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-11 21:46 Sven Wegener
@ 2008-08-12  1:10 ` David Miller
  0 siblings, 0 replies; 20+ messages in thread
From: David Miller @ 2008-08-12  1:10 UTC (permalink / raw)
  To: sven.wegener; +Cc: lvs-devel, netdev, horms

From: Sven Wegener <sven.wegener@stealer.net>
Date: Mon, 11 Aug 2008 23:46:50 +0200 (CEST)

> I have a couple of updates for IPVS pending. The patches have been
> posted to the mailing-list and acked by Simon Horman, so I thought it's
> ok to send you a pull request for them, if that's ok with you.
> 
> Mostly trivial cleanups. Two potential deadlock fixes, one introduced by
> my last sync daemon changes and one in the estimator code, which is
> going back for years. The other estimator change is the biggest one. If
> you have an issue with something, just holler and I'll get on it. I'll
> append an overall diff as it's not that big.

Pulled, thanks a lot Sven.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [GIT] Please pull updates for IPVS
@ 2008-08-15  0:12 Simon Horman
  2008-08-15  0:25 ` David Miller
  2008-08-27  5:33 ` Simon Horman
  0 siblings, 2 replies; 20+ messages in thread
From: Simon Horman @ 2008-08-15  0:12 UTC (permalink / raw)
  To: lvs-devel, netdev
  Cc: David Miller, Sven Wegener, Julius Volz, Wensong Zhang,
	Julian Anastasov

Hi Dave,

I have pulled together the handful of unmerged but agreed to
IPVS patches that are floating around.

Julius, Sven and I would particularly like Julius' two changes to go
in. They add a new interface which is currently unused and thus the
likelihood of breakage seems low.

The other changes are clean ups.



The following changes since commit 0eb8b1fe9238ca4c1797e4c105d5790abda1726f:
  Michael Chan (1):
        bnx2: Update version to 1.8.0.

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git master

Julius Volz (2):
      IPVS: Add genetlink interface definitions to ip_vs.h
      IPVS: Add genetlink interface implementation

Simon Horman (1):
      ipvs: rename __ip_vs_wlc_schedule in lblc and lblcr schedulers

Sven Wegener (2):
      ipvs: Only call init_service, update_service and done_service for schedulers if defined
      ipvs: Create init functions for estimator code

 include/linux/ip_vs.h       |  160 ++++++++
 include/net/ip_vs.h         |    2 +
 net/ipv4/ipvs/ip_vs_core.c  |    8 +-
 net/ipv4/ipvs/ip_vs_ctl.c   |  896 ++++++++++++++++++++++++++++++++++++++++++-
 net/ipv4/ipvs/ip_vs_est.c   |   18 +-
 net/ipv4/ipvs/ip_vs_lblc.c  |   13 +-
 net/ipv4/ipvs/ip_vs_lblcr.c |   13 +-
 net/ipv4/ipvs/ip_vs_lc.c    |   21 -
 net/ipv4/ipvs/ip_vs_nq.c    |   24 --
 net/ipv4/ipvs/ip_vs_rr.c    |    7 -
 net/ipv4/ipvs/ip_vs_sed.c   |   24 --
 net/ipv4/ipvs/ip_vs_wlc.c   |   24 --
 12 files changed, 1072 insertions(+), 138 deletions(-)

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15  0:12 [GIT] Please pull updates for IPVS Simon Horman
@ 2008-08-15  0:25 ` David Miller
  2008-08-15  1:02   ` Simon Horman
  2008-08-27  5:33 ` Simon Horman
  1 sibling, 1 reply; 20+ messages in thread
From: David Miller @ 2008-08-15  0:25 UTC (permalink / raw)
  To: horms; +Cc: lvs-devel, netdev, sven.wegener, juliusv, wensong, ja

From: Simon Horman <horms@verge.net.au>
Date: Fri, 15 Aug 2008 10:12:52 +1000

> Julius, Sven and I would particularly like Julius' two changes to go
> in. They add a new interface which is currently unused and thus the
> likelihood of breakage seems low.

Actually these are the two changes that should not go in at this
time.  This netlink stuff is a new feature, therefore not appropriate
to merge outside of the merge window.

Bug fixes only now, please.

Thanks.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15  0:25 ` David Miller
@ 2008-08-15  1:02   ` Simon Horman
  2008-08-15  6:09     ` Sven Wegener
  2008-08-15 11:31     ` Julius Volz
  0 siblings, 2 replies; 20+ messages in thread
From: Simon Horman @ 2008-08-15  1:02 UTC (permalink / raw)
  To: David Miller; +Cc: lvs-devel, netdev, sven.wegener, juliusv, wensong, ja

On Thu, Aug 14, 2008 at 05:25:08PM -0700, David Miller wrote:
> From: Simon Horman <horms@verge.net.au>
> Date: Fri, 15 Aug 2008 10:12:52 +1000
> 
> > Julius, Sven and I would particularly like Julius' two changes to go
> > in. They add a new interface which is currently unused and thus the
> > likelihood of breakage seems low.
> 
> Actually these are the two changes that should not go in at this
> time.  This netlink stuff is a new feature, therefore not appropriate
> to merge outside of the merge window.
> 
> Bug fixes only now, please.

Hi Dave,

thanks for the clarification. In that case I believe that
all of these changes can wait.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15  1:02   ` Simon Horman
@ 2008-08-15  6:09     ` Sven Wegener
  2008-08-15 11:31     ` Julius Volz
  1 sibling, 0 replies; 20+ messages in thread
From: Sven Wegener @ 2008-08-15  6:09 UTC (permalink / raw)
  To: Simon Horman; +Cc: David Miller, lvs-devel, netdev, juliusv, wensong, ja

On Fri, 15 Aug 2008, Simon Horman wrote:

> On Thu, Aug 14, 2008 at 05:25:08PM -0700, David Miller wrote:
> > From: Simon Horman <horms@verge.net.au>
> > Date: Fri, 15 Aug 2008 10:12:52 +1000
> > 
> > > Julius, Sven and I would particularly like Julius' two changes to go
> > > in. They add a new interface which is currently unused and thus the
> > > likelihood of breakage seems low.
> > 
> > Actually these are the two changes that should not go in at this
> > time.  This netlink stuff is a new feature, therefore not appropriate
> > to merge outside of the merge window.
> > 
> > Bug fixes only now, please.
> 
> thanks for the clarification. In that case I believe that
> all of these changes can wait.

We should get something cooked up for -next, so that we can push these 
changes this way into wider testing. Having a place for -next might be 
good in general, not for this case only.

Sven

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15  1:02   ` Simon Horman
  2008-08-15  6:09     ` Sven Wegener
@ 2008-08-15 11:31     ` Julius Volz
  2008-08-15 21:18       ` David Miller
  1 sibling, 1 reply; 20+ messages in thread
From: Julius Volz @ 2008-08-15 11:31 UTC (permalink / raw)
  To: Simon Horman; +Cc: David Miller, lvs-devel, netdev, sven.wegener, wensong, ja

On Fri, Aug 15, 2008 at 3:02 AM, Simon Horman <horms@verge.net.au> wrote:
> On Thu, Aug 14, 2008 at 05:25:08PM -0700, David Miller wrote:
>> From: Simon Horman <horms@verge.net.au>
>> Date: Fri, 15 Aug 2008 10:12:52 +1000
>>
>> > Julius, Sven and I would particularly like Julius' two changes to go
>> > in. They add a new interface which is currently unused and thus the
>> > likelihood of breakage seems low.
>>
>> Actually these are the two changes that should not go in at this
>> time.  This netlink stuff is a new feature, therefore not appropriate
>> to merge outside of the merge window.
>>
>> Bug fixes only now, please.
>
> Hi Dave,
>
> thanks for the clarification. In that case I believe that
> all of these changes can wait.

Ok, how does the process work? Do I send the patches again at a later
point or will they be pulled from your tree then?

Julius

-- 
Google Switzerland GmbH

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15 11:31     ` Julius Volz
@ 2008-08-15 21:18       ` David Miller
  2008-08-15 21:39         ` Julius Volz
  2008-08-16  3:41         ` Simon Horman
  0 siblings, 2 replies; 20+ messages in thread
From: David Miller @ 2008-08-15 21:18 UTC (permalink / raw)
  To: juliusv; +Cc: horms, lvs-devel, netdev, sven.wegener, wensong, ja

From: "Julius Volz" <juliusv@google.com>
Date: Fri, 15 Aug 2008 13:31:59 +0200

> On Fri, Aug 15, 2008 at 3:02 AM, Simon Horman <horms@verge.net.au> wrote:
> > thanks for the clarification. In that case I believe that
> > all of these changes can wait.
> 
> Ok, how does the process work? Do I send the patches again at a later
> point or will they be pulled from your tree then?

Simon can maintain a tree if he wants, and your feature patches can
go into there.

Later when I start accepting net-next-2.6 stuff, I can pull things in
from him.

Or Sven can maintain such a GIT tree, whoever wants to do it.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15 21:18       ` David Miller
@ 2008-08-15 21:39         ` Julius Volz
  2008-08-15 21:45           ` David Miller
  2008-08-16  3:41         ` Simon Horman
  1 sibling, 1 reply; 20+ messages in thread
From: Julius Volz @ 2008-08-15 21:39 UTC (permalink / raw)
  To: David Miller; +Cc: horms, lvs-devel, netdev, sven.wegener, wensong, ja

On Fri, Aug 15, 2008 at 11:18 PM, David Miller <davem@davemloft.net> wrote:
> From: "Julius Volz" <juliusv@google.com>
> Date: Fri, 15 Aug 2008 13:31:59 +0200
>
>> On Fri, Aug 15, 2008 at 3:02 AM, Simon Horman <horms@verge.net.au> wrote:
>> > thanks for the clarification. In that case I believe that
>> > all of these changes can wait.
>>
>> Ok, how does the process work? Do I send the patches again at a later
>> point or will they be pulled from your tree then?
>
> Simon can maintain a tree if he wants, and your feature patches can
> go into there.
>
> Later when I start accepting net-next-2.6 stuff, I can pull things in
> from him.
>
> Or Sven can maintain such a GIT tree, whoever wants to do it.

Ok, thanks!

Sorry, I was not fully aware about the process and what may go in
when. From reading about it, it seems that after an -rc1, only bug
fixes are accepted until after the stable release. So I guess you only
start accepting net-next-2.6 stuff after the official stable release,
too?

Julius

-- 
Google Switzerland GmbH

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15 21:39         ` Julius Volz
@ 2008-08-15 21:45           ` David Miller
  2008-08-15 21:48             ` Julius Volz
  0 siblings, 1 reply; 20+ messages in thread
From: David Miller @ 2008-08-15 21:45 UTC (permalink / raw)
  To: juliusv; +Cc: horms, lvs-devel, netdev, sven.wegener, wensong, ja

From: "Julius Volz" <juliusv@google.com>
Date: Fri, 15 Aug 2008 23:39:15 +0200

> Sorry, I was not fully aware about the process and what may go in
> when. From reading about it, it seems that after an -rc1, only bug
> fixes are accepted until after the stable release. So I guess you only
> start accepting net-next-2.6 stuff after the official stable release,
> too?

I could start accepting things into my net-next-2.6 tree now, but I'd
rather people work on bug fixing for just a little bit longer.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15 21:45           ` David Miller
@ 2008-08-15 21:48             ` Julius Volz
  0 siblings, 0 replies; 20+ messages in thread
From: Julius Volz @ 2008-08-15 21:48 UTC (permalink / raw)
  To: David Miller; +Cc: horms, lvs-devel, netdev, sven.wegener, wensong, ja

On Fri, Aug 15, 2008 at 11:45 PM, David Miller <davem@davemloft.net> wrote:
> From: "Julius Volz" <juliusv@google.com>
> Date: Fri, 15 Aug 2008 23:39:15 +0200
>
>> Sorry, I was not fully aware about the process and what may go in
>> when. From reading about it, it seems that after an -rc1, only bug
>> fixes are accepted until after the stable release. So I guess you only
>> start accepting net-next-2.6 stuff after the official stable release,
>> too?
>
> I could start accepting things into my net-next-2.6 tree now, but I'd
> rather people work on bug fixing for just a little bit longer.

Makes sense, thanks for the explanation!

Julius

-- 
Google Switzerland GmbH

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15 21:18       ` David Miller
  2008-08-15 21:39         ` Julius Volz
@ 2008-08-16  3:41         ` Simon Horman
  1 sibling, 0 replies; 20+ messages in thread
From: Simon Horman @ 2008-08-16  3:41 UTC (permalink / raw)
  To: David Miller; +Cc: juliusv, lvs-devel, netdev, sven.wegener, wensong, ja

On Fri, Aug 15, 2008 at 02:18:41PM -0700, David Miller wrote:
> From: "Julius Volz" <juliusv@google.com>
> Date: Fri, 15 Aug 2008 13:31:59 +0200
> 
> > On Fri, Aug 15, 2008 at 3:02 AM, Simon Horman <horms@verge.net.au> wrote:
> > > thanks for the clarification. In that case I believe that
> > > all of these changes can wait.
> > 
> > Ok, how does the process work? Do I send the patches again at a later
> > point or will they be pulled from your tree then?
> 
> Simon can maintain a tree if he wants, and your feature patches can
> go into there.

I'd like to take a stab at maintaining a tree.

> Later when I start accepting net-next-2.6 stuff, I can pull things in
> from him.
> 
> Or Sven can maintain such a GIT tree, whoever wants to do it.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-15  0:12 [GIT] Please pull updates for IPVS Simon Horman
  2008-08-15  0:25 ` David Miller
@ 2008-08-27  5:33 ` Simon Horman
  2008-08-27 12:13   ` David Miller
  1 sibling, 1 reply; 20+ messages in thread
From: Simon Horman @ 2008-08-27  5:33 UTC (permalink / raw)
  To: lvs-devel, netdev
  Cc: David Miller, Sven Wegener, Julius Volz, Wensong Zhang,
	Julian Anastasov

Hi Dave,

Please let me know if this is inappropriate or I am doing things wrong.
This should pull straight into net-next.2.6. The master branch is still
based on net-2.6 and also contains all of these changesets (less the last
trivial merge).



The following changes since commit a4356b2920fd4861dd6c75f558749fa5c38a00e8:
  lpo Järvinen (1):
      tcp: Add tcp_parse_aligned_timestamp

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6

Julius Volz (4):
      IPVS: Add genetlink interface definitions to ip_vs.h
      IPVS: Add genetlink interface implementation
      IPVS: Integrate ESP protocol into ip_vs_proto_ah.c
      IPVS: Rename ip_vs_proto_ah.c to ip_vs_proto_ah_esp.c

Simon Horman (4):
      ipvs: rename __ip_vs_wlc_schedule in lblc and lblcr schedulers
      Merge branch 'master' of git://git.kernel.org/.../davem/net-2.6
      Merge branch 'master' of git://git.kernel.org/.../davem/net-2.6
      Merge branch 'master' of git://git.kernel.org/.../horms/lvs-2.6 into lvs-next-2.6

Sven Wegener (4):
      ipvs: Only call init_service, update_service and done_service for schedulers if defined
      ipvs: Create init functions for estimator code
      ipvs: Fix race conditions in lblc scheduler
      ipvs: Fix race conditions in lblcr scheduler

 include/linux/ip_vs.h       |  160 +++++++
 include/net/ip_vs.h         |    2 
 net/ipv4/ipvs/ip_vs_core.c  |    8 
 net/ipv4/ipvs/ip_vs_ctl.c   |  896 ++++++++++++++++++++++++++++++++++++++++++-
 net/ipv4/ipvs/ip_vs_est.c   |   18 
 net/ipv4/ipvs/ip_vs_lblc.c  |  213 ++++------
 net/ipv4/ipvs/ip_vs_lblcr.c |  238 +++++------
 net/ipv4/ipvs/ip_vs_lc.c    |   21 -
 net/ipv4/ipvs/ip_vs_nq.c    |   24 -
 net/ipv4/ipvs/ip_vs_rr.c    |    7 
 net/ipv4/ipvs/ip_vs_sed.c   |   24 -
 net/ipv4/ipvs/ip_vs_wlc.c   |   24 -
 12 files changed, 1278 insertions(+), 357 deletions(-)

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-08-27  5:33 ` Simon Horman
@ 2008-08-27 12:13   ` David Miller
  0 siblings, 0 replies; 20+ messages in thread
From: David Miller @ 2008-08-27 12:13 UTC (permalink / raw)
  To: horms; +Cc: lvs-devel, netdev, sven.wegener, juliusv, wensong, ja

From: Simon Horman <horms@verge.net.au>
Date: Wed, 27 Aug 2008 15:33:06 +1000

> Please let me know if this is inappropriate or I am doing things wrong.
> This should pull straight into net-next.2.6. The master branch is still
> based on net-2.6 and also contains all of these changesets (less the last
> trivial merge).
 ...
>   git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6

Pulled, thanks a lot mate.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [GIT] Please pull updates for IPVS
@ 2008-09-09 23:45 Simon Horman
  2008-09-10  2:57 ` David Miller
  0 siblings, 1 reply; 20+ messages in thread
From: Simon Horman @ 2008-09-09 23:45 UTC (permalink / raw)
  To: lvs-devel, netdev
  Cc: David Miller, Herbert Xu, Sven Wegener, Julius Volz, Vince Busam,
	Malcolm Turnbull, Siim Põder, Wensong Zhang,
	Julian Anastasov

Hi Dave,

Sorry for not sending a pull-request for a while. There are two new
features, IPv6 and local process load balancing. Unfortunately there were
some conflicts to shake out. And even more unfortunately some errors were
introduced along the way. In hindsight I should have merged IPv6 first and
sent you that. But I think that things are in order now.

If you would like me to change my process, please just let me know.

Summary:

1) Julius Volz and Vince Busam added IPv6 support.

2) Malcolm Turnbull and Siim Põder added support to allow
   connections from a local process to be load balanced.

3) I merged the local process load balancing and IPv6 features.

4) Julius Volz noticed that I broke IPv6 during this merge and
   thanks to some extensive testing found a bogus call
   to ip_route_me_harder(). This was a cut-and-paste error
   on my part. Very sorry about that.

5) Julian Anastasov noted that the local process feature was
   allowing for empty TCP checksums which is not legal. After
   discussion with Herbert Xu it was determined that the problem
   was that the new code didn't handle partial checksums correctly.

   Partial checksums were previously not possible as traffic from the
   loopback device was not handled at all (can they show up other ways?). I
   added some code to both TCP and UDP to handle PARTIAL_CHECKSUM. Once
   again Julius Volz did a lot of work testing the solution and verifying
   that it worked.

   I also came up with some patches to implement IPVS's checksumming in
   terms of the standard proto_csum_replace* helper functions. These
   patches produce incorrect checksums and have been put on hold for now.

6) Sven Wegener provided some post-merge review of the IPv6 code
   and some cleanup patches.

7) Sven Wegener provided a patch to streamline the way that the
   connection table size is configured through Kconfig.


The following changes are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6

They should apply cleanly to net-next-2.6, which I pulled and merged this
morning.

Julius Volz (23):
      IPVS: Add CONFIG_IP_VS_IPV6 option for IPv6 support
      IPVS: Change IPVS data structures to support IPv6 addresses
      IPVS: Add general v4/v6 helper functions / data structures
      IPVS: Add debug macros for v4 and v6 address output
      IPVS: Add internal versions of sockopt interface structs
      IPVS: Convert __ip_vs_svc_get() and __ip_vs_fwm_get()
      IPVS: Add v6 support to ip_vs_service_get()
      IPVS: Add IPv6 support flag to schedulers
      IPVS: Add 'af' args to protocol handler functions
      IPVS: Add protocol debug functions for IPv6
      IPVS: Extend protocol DNAT/SNAT and state handlers
      IPVS: Extend functions for getting/creating connections
      IPVS: Add IPv6 support to xmit() support functions
      IPVS: Add and bind IPv6 xmit functions
      IPVS: Extend scheduling functions for IPv6 support
      IPVS: Add/adjust Netfilter hook functions and helpers for v6
      IPVS: Convert real server lookup functions
      IVPS: Disable sync daemon for IPv6 connections
      IPVS: Turn off FTP application helper for IPv6
      IPVS: Adjust various debug outputs to use new macros
      IPVS: Activate IPv6 Netfilter hooks
      IPVS: Allow adding IPv6 services from userspace
      IPVS: Remove incorrect ip_route_me_harder(), fix IPv6

Malcolm Turnbull (1):
      ipvs: load balance IPv4 connections from a local process

Simon Horman (5):
      ipvs: load balance ipv6 connections from a local process
      IPVS: fix bogus indentation
      IPVS: use ipv6_addr_copy()
      ipvs: handle PARTIAL_CHECKSUM
      Merge git://git.kernel.org/.../davem/net-next-2.6 into lvs-next-2.6

Sven Wegener (6):
      ipvs: Use pointer to address from sync message
      ipvs: Return negative error values from ip_vs_edit_service()
      ipvs: Mark tcp/udp v4 and v6 debug functions static
      ipvs: Reject ipv6 link-local addresses for destinations
      ipvs: Restrict connection table size via Kconfig
      ipvs: Embed user stats structure into kernel stats structure

Vince Busam (2):
      IPVS: Convert procfs files for IPv6 entry output
      IPVS: Add function to determine if IPv6 address is local

 include/net/ip_vs.h                |  308 ++++++++++---
 net/ipv4/ipvs/Kconfig              |   11 
 net/ipv4/ipvs/ip_vs_conn.c         |  249 +++++++----
 net/ipv4/ipvs/ip_vs_core.c         |  806 +++++++++++++++++++++++++++---------
 net/ipv4/ipvs/ip_vs_ctl.c          |  523 +++++++++++++++--------
 net/ipv4/ipvs/ip_vs_dh.c           |    5 
 net/ipv4/ipvs/ip_vs_est.c          |   40 -
 net/ipv4/ipvs/ip_vs_ftp.c          |   61 +-
 net/ipv4/ipvs/ip_vs_lblc.c         |    7 
 net/ipv4/ipvs/ip_vs_lblcr.c        |   11 
 net/ipv4/ipvs/ip_vs_lc.c           |   11 
 net/ipv4/ipvs/ip_vs_nq.c           |   15 
 net/ipv4/ipvs/ip_vs_proto.c        |   65 ++
 net/ipv4/ipvs/ip_vs_proto_ah_esp.c |  100 ++--
 net/ipv4/ipvs/ip_vs_proto_tcp.c    |  253 ++++++++---
 net/ipv4/ipvs/ip_vs_proto_udp.c    |  226 +++++++---
 net/ipv4/ipvs/ip_vs_rr.c           |   13 
 net/ipv4/ipvs/ip_vs_sed.c          |   15 
 net/ipv4/ipvs/ip_vs_sh.c           |    5 
 net/ipv4/ipvs/ip_vs_sync.c         |   40 +
 net/ipv4/ipvs/ip_vs_wlc.c          |   15 
 net/ipv4/ipvs/ip_vs_wrr.c          |   15 
 net/ipv4/ipvs/ip_vs_xmit.c         |  471 ++++++++++++++++++++-
 23 files changed, 2469 insertions(+), 796 deletions(-)


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-09-09 23:45 Simon Horman
@ 2008-09-10  2:57 ` David Miller
  0 siblings, 0 replies; 20+ messages in thread
From: David Miller @ 2008-09-10  2:57 UTC (permalink / raw)
  To: horms
  Cc: lvs-devel, netdev, herbert, sven.wegener, juliusv, vbusam,
	malcolm, siim, wensong, ja

From: Simon Horman <horms@verge.net.au>
Date: Wed, 10 Sep 2008 09:45:40 +1000

> Sorry for not sending a pull-request for a while. There are two new
> features, IPv6 and local process load balancing. Unfortunately there were
> some conflicts to shake out. And even more unfortunately some errors were
> introduced along the way. In hindsight I should have merged IPv6 first and
> sent you that. But I think that things are in order now.
 ...
>   git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6

Pulled and pushed back out to net-next-2.6, thanks Simon.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [GIT] Please pull updates for IPVS
@ 2008-09-17  0:21 Simon Horman
  2008-09-18 21:44 ` David Miller
  0 siblings, 1 reply; 20+ messages in thread
From: Simon Horman @ 2008-09-17  0:21 UTC (permalink / raw)
  To: lvs-devel, netdev
  Cc: David Miller, Brian Haley, Sven Wegener, Julius Volz, Vince Busam,
	Wensong Zhang, Julian Anastasov

Hi Dave,

the following are several cleanup patches, mainly resulting from
the IPv6 merge. The "ipvs: supply a valid 0 address to ip_vs_conn_new()"
change appears to be a fix for a regression caused by that merge,
though I don't believe that anyone has observed it causing a problem.


The following changes are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6

They should apply cleanly to net-next-2.6, which I pulled and merged this
morning.

Brian Haley (1):
      ipvs: change some __constant_htons() to htons()

Simon Horman (4):
      Merge git://git.kernel.org/.../horms/lvs-2.6 into lvs-next-2.6
      ipvs: only unlock in ip_vs_edit_service() if already locked
      ipvs: supply a valid 0 address to ip_vs_conn_new()
      ipvs: add __aquire/__release annotations to ip_vs_info_seq_start/ip_vs_info_seq_stop

 net/ipv4/ipvs/ip_vs_core.c         |    3 ++-
 net/ipv4/ipvs/ip_vs_ctl.c          |    9 ++++++---
 net/ipv4/ipvs/ip_vs_proto.c        |    2 +-
 net/ipv4/ipvs/ip_vs_proto_ah_esp.c |    2 +-
 4 files changed, 10 insertions(+), 6 deletions(-)



-- 
Simon Horman
  VA Linux Systems Japan K.K., Sydney, Australia Satellite Office
  H: www.vergenet.net/~horms/             W: www.valinux.co.jp/en


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-09-17  0:21 Simon Horman
@ 2008-09-18 21:44 ` David Miller
  0 siblings, 0 replies; 20+ messages in thread
From: David Miller @ 2008-09-18 21:44 UTC (permalink / raw)
  To: horms
  Cc: lvs-devel, netdev, brian.haley, sven.wegener, juliusv, vbusam,
	wensong, ja

From: Simon Horman <horms@verge.net.au>
Date: Wed, 17 Sep 2008 10:21:48 +1000

> the following are several cleanup patches, mainly resulting from
> the IPv6 merge. The "ipvs: supply a valid 0 address to ip_vs_conn_new()"
> change appears to be a fix for a regression caused by that merge,
> though I don't believe that anyone has observed it causing a problem.
> 
> The following changes are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6
> 
> They should apply cleanly to net-next-2.6, which I pulled and merged this
> morning.

Pulled, thanks a lot Simon.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [GIT] Please pull updates for IPVS
@ 2008-10-07  0:17 Simon Horman
  2008-10-08 21:30 ` David Miller
  0 siblings, 1 reply; 20+ messages in thread
From: Simon Horman @ 2008-10-07  0:17 UTC (permalink / raw)
  To: lvs-devel, netdev
  Cc: David Miller, Patrick McHardy, Sven Wegener, Julius Volz,
	Wensong Zhang, Julian Anastasov

Hi Dave,

Please pull the following changes. Sorry I have let some of
them sit in my tree for a while, I wanted to be sure that
Patrick McHardy was ok with the move to netfilter.

1) Fix from Sven Wegener to prevent more than 255 connections
   from being added to a synchronisation packet - which results
   in something unparsable by the other end. The cause of this was
   an assumption that 1500 would be the largest MTU.

   This bug is likely as old as the synchronisation code.

2) An unused label fix from Sven Wegener.

   This is just minor fall-out from the the IPVS IPv6 merge.

3) Julius Volz moved IPVS from net/ipv4/ipvs/ to net/netfilter/ipvs/

   This is an enourmous patch, but really is a simple as
   the commit message claims.


The following changes are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6

They should apply cleanly to net-next-2.6, which I pulled and merged this
morning.

Julius Volz (1):
      IPVS: Move IPVS to net/netfilter/ipvs

Simon Horman (1):
      Merge git://git.kernel.org/.../davem/net-next-2.6 into lvs-next-2.6

Sven Wegener (2):
      ipvs: Restrict sync message to 255 connections
      ipvs: Fix unused label warning

 net/ipv4/Kconfig                        |    2 
 net/ipv4/Makefile                       |    1 
 net/ipv4/ipvs/Kconfig                   |  239 --
 net/ipv4/ipvs/Makefile                  |   33 
 net/ipv4/ipvs/ip_vs_app.c               |  622 -----
 net/ipv4/ipvs/ip_vs_conn.c              | 1110 ---------
 net/ipv4/ipvs/ip_vs_core.c              | 1542 -------------
 net/ipv4/ipvs/ip_vs_ctl.c               | 3441 ------------------------------
 net/ipv4/ipvs/ip_vs_est.c               |  166 -
 net/ipv4/ipvs/ip_vs_ftp.c               |  410 ---
 net/ipv4/ipvs/ip_vs_lblc.c              |  555 ----
 net/ipv4/ipvs/ip_vs_lblcr.c             |  755 ------
 net/ipv4/ipvs/ip_vs_lc.c                |  103 
 net/ipv4/ipvs/ip_vs_nq.c                |  138 -
 net/ipv4/ipvs/ip_vs_proto.c             |  288 --
 net/ipv4/ipvs/ip_vs_proto_ah_esp.c      |  235 --
 net/ipv4/ipvs/ip_vs_proto_tcp.c         |  732 ------
 net/ipv4/ipvs/ip_vs_proto_udp.c         |  533 ----
 net/ipv4/ipvs/ip_vs_rr.c                |  112 -
 net/ipv4/ipvs/ip_vs_sched.c             |  251 --
 net/ipv4/ipvs/ip_vs_sed.c               |  140 -
 net/ipv4/ipvs/ip_vs_sh.c                |  258 --
 net/ipv4/ipvs/ip_vs_sync.c              |  940 --------
 net/ipv4/ipvs/ip_vs_wlc.c               |  128 -
 net/ipv4/ipvs/ip_vs_wrr.c               |  237 --
 net/ipv4/ipvs/ip_vs_xmit.c              | 1004 ---------
 net/netfilter/Kconfig                   |    2 
 net/netfilter/Makefile                  |    3 
 net/netfilter/ipvs/Kconfig              |  239 ++
 net/netfilter/ipvs/Makefile             |   33 
 net/netfilter/ipvs/ip_vs_app.c          |  622 +++++
 net/netfilter/ipvs/ip_vs_conn.c         | 1110 +++++++++
 net/netfilter/ipvs/ip_vs_core.c         | 1542 +++++++++++++
 net/netfilter/ipvs/ip_vs_ctl.c          | 3443 +++++++++++++++++++++++++++++++
 net/netfilter/ipvs/ip_vs_dh.c           |  261 ++
 net/netfilter/ipvs/ip_vs_est.c          |  166 +
 net/netfilter/ipvs/ip_vs_ftp.c          |  410 +++
 net/netfilter/ipvs/ip_vs_lblc.c         |  555 ++++
 net/netfilter/ipvs/ip_vs_lblcr.c        |  755 ++++++
 net/netfilter/ipvs/ip_vs_lc.c           |  103 
 net/netfilter/ipvs/ip_vs_nq.c           |  138 +
 net/netfilter/ipvs/ip_vs_proto.c        |  288 ++
 net/netfilter/ipvs/ip_vs_proto_ah_esp.c |  235 ++
 net/netfilter/ipvs/ip_vs_proto_tcp.c    |  732 ++++++
 net/netfilter/ipvs/ip_vs_proto_udp.c    |  533 ++++
 net/netfilter/ipvs/ip_vs_rr.c           |  112 +
 net/netfilter/ipvs/ip_vs_sched.c        |  251 ++
 net/netfilter/ipvs/ip_vs_sed.c          |  140 +
 net/netfilter/ipvs/ip_vs_sh.c           |  258 ++
 net/netfilter/ipvs/ip_vs_sync.c         |  942 ++++++++
 net/netfilter/ipvs/ip_vs_wlc.c          |  128 +
 net/netfilter/ipvs/ip_vs_wrr.c          |  237 ++
 net/netfilter/ipvs/ip_vs_xmit.c         | 1004 +++++++++
 53 files changed, 14242 insertions(+), 13975 deletions(-)

-- 
Simon Horman
  VA Linux Systems Japan K.K., Sydney, Australia Satellite Office
  H: www.vergenet.net/~horms/             W: www.valinux.co.jp/en


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [GIT] Please pull updates for IPVS
  2008-10-07  0:17 Simon Horman
@ 2008-10-08 21:30 ` David Miller
  0 siblings, 0 replies; 20+ messages in thread
From: David Miller @ 2008-10-08 21:30 UTC (permalink / raw)
  To: horms; +Cc: lvs-devel, netdev, kaber, sven.wegener, juliusv, wensong, ja

From: Simon Horman <horms@verge.net.au>
Date: Tue, 7 Oct 2008 11:17:10 +1100

> Please pull the following changes. Sorry I have let some of
> them sit in my tree for a while, I wanted to be sure that
> Patrick McHardy was ok with the move to netfilter.
 ...
> The following changes are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6.git lvs-next-2.6
> 
> They should apply cleanly to net-next-2.6, which I pulled and merged this
> morning.

Pulled thanks a lot Simon.

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2008-10-08 21:30 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-15  0:12 [GIT] Please pull updates for IPVS Simon Horman
2008-08-15  0:25 ` David Miller
2008-08-15  1:02   ` Simon Horman
2008-08-15  6:09     ` Sven Wegener
2008-08-15 11:31     ` Julius Volz
2008-08-15 21:18       ` David Miller
2008-08-15 21:39         ` Julius Volz
2008-08-15 21:45           ` David Miller
2008-08-15 21:48             ` Julius Volz
2008-08-16  3:41         ` Simon Horman
2008-08-27  5:33 ` Simon Horman
2008-08-27 12:13   ` David Miller
  -- strict thread matches above, loose matches on Subject: below --
2008-10-07  0:17 Simon Horman
2008-10-08 21:30 ` David Miller
2008-09-17  0:21 Simon Horman
2008-09-18 21:44 ` David Miller
2008-09-09 23:45 Simon Horman
2008-09-10  2:57 ` David Miller
2008-08-11 21:46 Sven Wegener
2008-08-12  1:10 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).