 +	atomic_set(&dest->slow_start_data2, ss_shift);
 +
 +#ifdef CONFIG_IP_VS_DEBUG
-+	IP_VS_DBG(1, "CONN slow_start_init: server %u.%u.%u.%u:%u "
-+			"handicap=%u (%u) shift=%u ndest=%u\n",
-+			((unsigned char *)&dest->addr)[0],
-+			((unsigned char *)&dest->addr)[1],
-+			((unsigned char *)&dest->addr)[2],
-+			((unsigned char *)&dest->addr)[3],
-+			ntohs(dest->port), ss_handicap,
-+			ss_handicap >> ss_shift, ss_shift, ndest);
++	IP_VS_DBG_BUF(1, "CONN slow_start_init: server %s:%u "
++		"handicap=%u (%u) shift=%u ndest=%u\n",
++		IP_VS_DBG_ADDR(dest->af, &dest->addr),
++		ntohs(dest->port), ss_handicap,
++		ss_handicap >> ss_shift, ss_shift, ndest);
 +#endif
 +}
 +

diff --git a/include/linux/ip_vs.h b/include/linux/ip_vs.h
index 4deb383..1571f81 100644
--- a/include/linux/ip_vs.h
+++ b/include/linux/ip_vs.h
@@ -28,6 +28,18 @@
 #define IP_VS_DEST_F_OVERLOAD	0x0002		/* server is overloaded */
 
 /*
+ *      Advisory flags for slow start.
+ *
+ *      The absolute value size of the weight change will be stored
+ *      in dest->slow_start_data.  The flag and slow_start_data may
+ *      be used and modified by the scheduler to effect slow start.
+ */
+#define IP_VS_DEST_F_WEIGHT_INC       0x0003    /* Weight has been increaced */
+#define IP_VS_DEST_F_WEIGHT_DEC       0x0004    /* Weight has been increaced */
+#define IP_VS_DEST_F_WEIGHT_MASK	\
+	(IP_VS_DEST_F_WEIGHT_INC|IP_VS_DEST_F_WEIGHT_DEC)
+
+/*
  *      IPVS sync daemon states
  */
 #define IP_VS_STATE_NONE	0x0000		/* daemon is stopped */
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index de527d1..894ad55 100644
--- a/include/net/ip_vs.h

+
+#ifdef CONFIG_IP_VS_DEBUG
+	if (unlikely(!handicap))
+		IP_VS_DBG_BUF(1, "CONN slow_start_end: server %s:%u ",
+			IP_VS_DBG_ADDR(dest->af, &dest->addr),
+			ntohs(dest->port));
+#endif
+
+	return handicap >> atomic_read(&dest->slow_start_data2);
