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

Commit 33f8b9ec authored by WANG Cong's avatar WANG Cong Committed by David S. Miller
Browse files

net_sched: move tp->root allocation into fw_init()



Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a05c2d11
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@

struct fw_head {
	u32			mask;
	bool			mask_set;
	struct fw_filter __rcu	*ht[HTSIZE];
	struct rcu_head		rcu;
};
@@ -113,6 +114,14 @@ static unsigned long fw_get(struct tcf_proto *tp, u32 handle)

static int fw_init(struct tcf_proto *tp)
{
	struct fw_head *head;

	head = kzalloc(sizeof(struct fw_head), GFP_KERNEL);
	if (head == NULL)
		return -ENOBUFS;

	head->mask_set = false;
	rcu_assign_pointer(tp->root, head);
	return 0;
}

@@ -286,17 +295,11 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
	if (!handle)
		return -EINVAL;

	if (head == NULL) {
		u32 mask = 0xFFFFFFFF;
	if (!head->mask_set) {
		head->mask = 0xFFFFFFFF;
		if (tb[TCA_FW_MASK])
			mask = nla_get_u32(tb[TCA_FW_MASK]);

		head = kzalloc(sizeof(struct fw_head), GFP_KERNEL);
		if (head == NULL)
			return -ENOBUFS;
		head->mask = mask;

		rcu_assign_pointer(tp->root, head);
			head->mask = nla_get_u32(tb[TCA_FW_MASK]);
		head->mask_set = true;
	}

	f = kzalloc(sizeof(struct fw_filter), GFP_KERNEL);