LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

ip_vs_conn_expire_now may cause timer callback runs on two CPUs for a sa

To: lvs-devel@xxxxxxxxxxxxxxx
Subject: ip_vs_conn_expire_now may cause timer callback runs on two CPUs for a same session
From: HePeng <xnhp0320@xxxxxxxxxx>
Date: Sun, 2 Oct 2016 23:59:49 +0800
Hi, 

I am a newbie to IPVS.
I read the code of ipvs in 3.10 kernel, and think the 
the implementation of *ip_vs_expire_now* may cause 
timer callback runs on two CPUs for a same session.



CPU 0                         CPU 1                   CPU2



                      a timer is detached 
                      from lists, and the 
                      callback fn is going 
                      to be called.

                                               a packet belongs 
                                               to the same session
                                               is processed by this CPU 
                                               and the timer is re-activated on
                                               this CPU. Then, the ref of *cp* 
is released.

ip_vs_conn_expire_now
is called on this 
session, which finds 
a pending timer, and 
then *mod_timer_pending*
will change the timer
to expire immediately.
read_unlock allows 
preemption again.

the timer expires and 
callback runs.         call back fn runs
                       

Am I right? This seems break the rule that *ip_vs_conn_expire* should only 
runs on one CPU at time per conn.
see http://oss.sgi.com/archives/netdev/2003-11/msg00763.html



--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

<Prev in Thread] Current Thread [Next in Thread>