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
|