 +	/* Set up slow_start if weight has recently changed */
 +	if (unlikely(dest->flags & IP_VS_DEST_F_WEIGHT_MASK)) {
 +		__ip_vs_conn_set_slow_start(dest, svc);
-+		dest->flags |= IP_VS_DEST_F_WEIGHT_MASK;
-+		dest->flags ^= IP_VS_DEST_F_WEIGHT_MASK;
++		dest->flags &= ~IP_VS_DEST_F_WEIGHT_MASK;
 +	}
 +
 +	handicap = atomic_read(&dest->slow_start_data);

+
+#ifdef CONFIG_IP_VS_DEBUG
+	if (unlikely(!handicap))
+		IP_VS_DBG(1, "CONN slow_start_end: server %u.%u.%u.%u:%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));
+#endif
+
+	return handicap >> atomic_read(&dest->slow_start_data2);

+	atomic_set(&dest->slow_start_data2, ss_shift);
+
+#ifdef CONFIG_IP_VS_DEBUG
+	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
+}
+
