Hi Julian
On Wed, 2013-03-06 at 10:42 +0200, Julian Anastasov wrote:
> The real server becomes unreachable on down event,
> no need to wait device unregistration. Should help in
> releasing dsts early before dst->dev is replaced with lo.
Have you test this in a network namespace ?
i.e. kill the namespace with heave traffic through it
From what I remember this was a tricky area...
I have some test cases for this, should I run them ?
> Signed-off-by: Julian Anastasov <ja@xxxxxx>
> ---
> net/netfilter/ipvs/ip_vs_ctl.c | 8 +++-----
> 1 files changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
> index c68198b..76fc8f2 100644
> --- a/net/netfilter/ipvs/ip_vs_ctl.c
> +++ b/net/netfilter/ipvs/ip_vs_ctl.c
> @@ -1512,10 +1512,8 @@ __ip_vs_dev_reset(struct ip_vs_dest *dest, struct
> net_device *dev)
> spin_unlock_bh(&dest->dst_lock);
>
> }
> -/*
> - * Netdev event receiver
> - * Currently only NETDEV_UNREGISTER is handled, i.e. if we hold a reference
> to
> - * a device that is "unregister" it must be released.
> +/* Netdev event receiver
> + * Currently only NETDEV_DOWN is handled to release refs to cached dsts
> */
> static int ip_vs_dst_event(struct notifier_block *this, unsigned long event,
> void *ptr)
> @@ -1527,7 +1525,7 @@ static int ip_vs_dst_event(struct notifier_block *this,
> unsigned long event,
> struct ip_vs_dest *dest;
> unsigned int idx;
>
> - if (event != NETDEV_UNREGISTER || !ipvs)
> + if (event != NETDEV_DOWN || !ipvs)
> return NOTIFY_DONE;
> IP_VS_DBG(3, "%s() dev=%s\n", __func__, dev->name);
> EnterFunction(2);
Regards
Hans
smime.p7s
Description: S/MIME cryptographic signature
|