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

Commit a2c09ac0 authored by Inju Song's avatar Inju Song Committed by Simon Horman
Browse files

netfilter: ipvs: Keep latest weight of destination



The hashing table in scheduler such as source hash or maglev hash
should ignore the changed weight to 0 and allow changing the weight
from/to non-0 values. So, struct ip_vs_dest needs to keep weight
with latest non-0 weight.

Signed-off-by: default avatarInju Song <inju.song@navercorp.com>
Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
parent 535101ec
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -668,6 +668,7 @@ struct ip_vs_dest {
	volatile unsigned int	flags;		/* dest status flags */
	atomic_t		conn_flags;	/* flags to copy to conn */
	atomic_t		weight;		/* server weight */
	atomic_t		last_weight;	/* server latest weight */

	refcount_t		refcnt;		/* reference counter */
	struct ip_vs_stats      stats;          /* statistics */
+4 −0
Original line number Diff line number Diff line
@@ -821,6 +821,10 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
	if (add && udest->af != svc->af)
		ipvs->mixed_address_family_dests++;

	/* keep the last_weight with latest non-0 weight */
	if (add || udest->weight != 0)
		atomic_set(&dest->last_weight, udest->weight);

	/* set the weight and the flags */
	atomic_set(&dest->weight, udest->weight);
	conn_flags = udest->conn_flags & IP_VS_CONN_F_DEST_MASK;