ip_vs_conn_expire_now may cause timer callback runs on two CPUs for a same session

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Filesystem Devel]     [Linux NFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]     [X.Org]

  Powered by Linux