• Julian Anastasov's avatar
    ipvs: convert connection locking · 088339a5
    Julian Anastasov authored
    Convert __ip_vs_conntbl_lock_array as follows:
    
    - readers that do not modify conn lists will use RCU lock
    - updaters that modify lists will use spinlock_t
    
    Now for conn lookups we will use RCU read-side
    critical section. Without using __ip_vs_conn_get such
    places have access to connection fields and can
    dereference some pointers like pe and pe_data plus
    the ability to update timer expiration. If full access
    is required we contend for reference.
    
    We add barrier in __ip_vs_conn_put, so that
    other CPUs see the refcnt operation after other writes.
    
    With the introduction of ip_vs_conn_unlink()
    we try to reorganize ip_vs_conn_expire(), so that
    unhashing of connections that should stay more time is
    avoided, even if it is for very short time.
    Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
    Signed-off by: Hans Schillstrom <hans@schillstrom.com>
    Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
    088339a5
ip_vs.h 45.7 KB