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:
Cong Wang 2018-08-19 12:22:11 -07:00 коммит произвёл David S. Miller
Родитель a0c2e90fe1
Коммит 8ce5be1c89
1 изменённых файлов: 10 добавлений и 10 удалений

Просмотреть файл

@ -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;