mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-18 02:04:05 +08:00
[IPVS]: Add and reorder bh locks after moving to keventd.
An addition to the last ipvs changes that move update_defense_level/si_meminfo to keventd: - ip_vs_random_dropentry now runs in process context and should use _bh locks to protect from softirqs - update_defense_level still needs _bh locks after si_meminfo is called, for the same purpose Signed-off-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f5b8adb4f5
commit
af9debd461
@ -758,7 +758,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* Called from keventd and must protect itself from softirqs */
|
||||
void ip_vs_random_dropentry(void)
|
||||
{
|
||||
int idx;
|
||||
@ -773,7 +773,7 @@ void ip_vs_random_dropentry(void)
|
||||
/*
|
||||
* Lock is actually needed in this loop.
|
||||
*/
|
||||
ct_write_lock(hash);
|
||||
ct_write_lock_bh(hash);
|
||||
|
||||
list_for_each_entry(cp, &ip_vs_conn_tab[hash], c_list) {
|
||||
if (!cp->cport && !(cp->flags & IP_VS_CONN_F_NO_CPORT))
|
||||
@ -806,7 +806,7 @@ void ip_vs_random_dropentry(void)
|
||||
ip_vs_conn_expire_now(cp->control);
|
||||
}
|
||||
}
|
||||
ct_write_unlock(hash);
|
||||
ct_write_unlock_bh(hash);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,8 @@ int ip_vs_get_debug_level(void)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* update_defense_level is called from keventd and from sysctl.
|
||||
* update_defense_level is called from keventd and from sysctl,
|
||||
* so it needs to protect itself from softirqs
|
||||
*/
|
||||
static void update_defense_level(void)
|
||||
{
|
||||
@ -110,6 +111,8 @@ static void update_defense_level(void)
|
||||
|
||||
nomem = (availmem < sysctl_ip_vs_amemthresh);
|
||||
|
||||
local_bh_disable();
|
||||
|
||||
/* drop_entry */
|
||||
spin_lock(&__ip_vs_dropentry_lock);
|
||||
switch (sysctl_ip_vs_drop_entry) {
|
||||
@ -206,6 +209,8 @@ static void update_defense_level(void)
|
||||
if (to_change >= 0)
|
||||
ip_vs_protocol_timeout_change(sysctl_ip_vs_secure_tcp>1);
|
||||
write_unlock(&__ip_vs_securetcp_lock);
|
||||
|
||||
local_bh_enable();
|
||||
}
|
||||
|
||||
|
||||
@ -1360,9 +1365,7 @@ proc_do_defense_mode(ctl_table *table, int write, struct file * filp,
|
||||
/* Restore the correct value */
|
||||
*valp = val;
|
||||
} else {
|
||||
local_bh_disable();
|
||||
update_defense_level();
|
||||
local_bh_enable();
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
|
Loading…
Reference in New Issue
Block a user