Revert "net: sched: act_ife: disable bh when taking ife_mod_lock"
This reverts commit 42c625a486
("net: sched: act_ife: disable bh
when taking ife_mod_lock"), because what ife_mod_lock protects
is absolutely not touched in rate est timer BH context, they have
no race.
A better fix is following up.
Cc: Vlad Buslov <vladbu@mellanox.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
a0c2e90fe1
Коммит
8ce5be1c89
|
@ -167,16 +167,16 @@ static struct tcf_meta_ops *find_ife_oplist(u16 metaid)
|
||||||
{
|
{
|
||||||
struct tcf_meta_ops *o;
|
struct tcf_meta_ops *o;
|
||||||
|
|
||||||
read_lock_bh(&ife_mod_lock);
|
read_lock(&ife_mod_lock);
|
||||||
list_for_each_entry(o, &ifeoplist, list) {
|
list_for_each_entry(o, &ifeoplist, list) {
|
||||||
if (o->metaid == metaid) {
|
if (o->metaid == metaid) {
|
||||||
if (!try_module_get(o->owner))
|
if (!try_module_get(o->owner))
|
||||||
o = NULL;
|
o = NULL;
|
||||||
read_unlock_bh(&ife_mod_lock);
|
read_unlock(&ife_mod_lock);
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
read_unlock_bh(&ife_mod_lock);
|
read_unlock(&ife_mod_lock);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -190,12 +190,12 @@ int register_ife_op(struct tcf_meta_ops *mops)
|
||||||
!mops->get || !mops->alloc)
|
!mops->get || !mops->alloc)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
write_lock_bh(&ife_mod_lock);
|
write_lock(&ife_mod_lock);
|
||||||
|
|
||||||
list_for_each_entry(m, &ifeoplist, list) {
|
list_for_each_entry(m, &ifeoplist, list) {
|
||||||
if (m->metaid == mops->metaid ||
|
if (m->metaid == mops->metaid ||
|
||||||
(strcmp(mops->name, m->name) == 0)) {
|
(strcmp(mops->name, m->name) == 0)) {
|
||||||
write_unlock_bh(&ife_mod_lock);
|
write_unlock(&ife_mod_lock);
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ int register_ife_op(struct tcf_meta_ops *mops)
|
||||||
mops->release = ife_release_meta_gen;
|
mops->release = ife_release_meta_gen;
|
||||||
|
|
||||||
list_add_tail(&mops->list, &ifeoplist);
|
list_add_tail(&mops->list, &ifeoplist);
|
||||||
write_unlock_bh(&ife_mod_lock);
|
write_unlock(&ife_mod_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(unregister_ife_op);
|
EXPORT_SYMBOL_GPL(unregister_ife_op);
|
||||||
|
@ -214,7 +214,7 @@ int unregister_ife_op(struct tcf_meta_ops *mops)
|
||||||
struct tcf_meta_ops *m;
|
struct tcf_meta_ops *m;
|
||||||
int err = -ENOENT;
|
int err = -ENOENT;
|
||||||
|
|
||||||
write_lock_bh(&ife_mod_lock);
|
write_lock(&ife_mod_lock);
|
||||||
list_for_each_entry(m, &ifeoplist, list) {
|
list_for_each_entry(m, &ifeoplist, list) {
|
||||||
if (m->metaid == mops->metaid) {
|
if (m->metaid == mops->metaid) {
|
||||||
list_del(&mops->list);
|
list_del(&mops->list);
|
||||||
|
@ -222,7 +222,7 @@ int unregister_ife_op(struct tcf_meta_ops *mops)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
write_unlock_bh(&ife_mod_lock);
|
write_unlock(&ife_mod_lock);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -343,13 +343,13 @@ static int use_all_metadata(struct tcf_ife_info *ife)
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
int installed = 0;
|
int installed = 0;
|
||||||
|
|
||||||
read_lock_bh(&ife_mod_lock);
|
read_lock(&ife_mod_lock);
|
||||||
list_for_each_entry(o, &ifeoplist, list) {
|
list_for_each_entry(o, &ifeoplist, list) {
|
||||||
rc = add_metainfo(ife, o->metaid, NULL, 0, true);
|
rc = add_metainfo(ife, o->metaid, NULL, 0, true);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
installed += 1;
|
installed += 1;
|
||||||
}
|
}
|
||||||
read_unlock_bh(&ife_mod_lock);
|
read_unlock(&ife_mod_lock);
|
||||||
|
|
||||||
if (installed)
|
if (installed)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче