Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8ce5be1c authored by Cong Wang's avatar Cong Wang Committed by David S. Miller
Browse files

Revert "net: sched: act_ife: disable bh when taking ife_mod_lock"



This reverts commit 42c625a4 ("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: default avatarCong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a0c2e90f
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -167,16 +167,16 @@ static struct tcf_meta_ops *find_ife_oplist(u16 metaid)
{
	struct tcf_meta_ops *o;

	read_lock_bh(&ife_mod_lock);
	read_lock(&ife_mod_lock);
	list_for_each_entry(o, &ifeoplist, list) {
		if (o->metaid == metaid) {
			if (!try_module_get(o->owner))
				o = NULL;
			read_unlock_bh(&ife_mod_lock);
			read_unlock(&ife_mod_lock);
			return o;
		}
	}
	read_unlock_bh(&ife_mod_lock);
	read_unlock(&ife_mod_lock);

	return NULL;
}
@@ -190,12 +190,12 @@ int register_ife_op(struct tcf_meta_ops *mops)
	    !mops->get || !mops->alloc)
		return -EINVAL;

	write_lock_bh(&ife_mod_lock);
	write_lock(&ife_mod_lock);

	list_for_each_entry(m, &ifeoplist, list) {
		if (m->metaid == mops->metaid ||
		    (strcmp(mops->name, m->name) == 0)) {
			write_unlock_bh(&ife_mod_lock);
			write_unlock(&ife_mod_lock);
			return -EEXIST;
		}
	}
@@ -204,7 +204,7 @@ int register_ife_op(struct tcf_meta_ops *mops)
		mops->release = ife_release_meta_gen;

	list_add_tail(&mops->list, &ifeoplist);
	write_unlock_bh(&ife_mod_lock);
	write_unlock(&ife_mod_lock);
	return 0;
}
EXPORT_SYMBOL_GPL(unregister_ife_op);
@@ -214,7 +214,7 @@ int unregister_ife_op(struct tcf_meta_ops *mops)
	struct tcf_meta_ops *m;
	int err = -ENOENT;

	write_lock_bh(&ife_mod_lock);
	write_lock(&ife_mod_lock);
	list_for_each_entry(m, &ifeoplist, list) {
		if (m->metaid == mops->metaid) {
			list_del(&mops->list);
@@ -222,7 +222,7 @@ int unregister_ife_op(struct tcf_meta_ops *mops)
			break;
		}
	}
	write_unlock_bh(&ife_mod_lock);
	write_unlock(&ife_mod_lock);

	return err;
}
@@ -343,13 +343,13 @@ static int use_all_metadata(struct tcf_ife_info *ife)
	int rc = 0;
	int installed = 0;

	read_lock_bh(&ife_mod_lock);
	read_lock(&ife_mod_lock);
	list_for_each_entry(o, &ifeoplist, list) {
		rc = add_metainfo(ife, o->metaid, NULL, 0, true);
		if (rc == 0)
			installed += 1;
	}
	read_unlock_bh(&ife_mod_lock);
	read_unlock(&ife_mod_lock);

	if (installed)
		return 0;