Commit 9d435073 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'tc-bind_class-hook'



Zhengchao Shao says:

====================
refactor duplicate codes in bind_class hook function

All the bind_class callback duplicate the same logic, so we can refactor
them. First, ensure n arg not empty before call bind_class hook function.
Then, add tc_cls_bind_class() helper. Last, use tc_cls_bind_class() in
filter.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents bc37b24e cc9039a1
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -210,6 +210,18 @@ tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r)
	__tcf_unbind_filter(q, r);
}

static inline void tc_cls_bind_class(u32 classid, unsigned long cl,
				     void *q, struct tcf_result *res,
				     unsigned long base)
{
	if (res->classid == classid) {
		if (cl)
			__tcf_bind_filter(q, res, base);
		else
			__tcf_unbind_filter(q, res);
	}
}

struct tcf_exts {
#ifdef CONFIG_NET_CLS_ACT
	__u32	type; /* for backward compat(TCA_OLD_COMPAT) */
+1 −6
Original line number Diff line number Diff line
@@ -261,12 +261,7 @@ static void basic_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
{
	struct basic_filter *f = fh;

	if (f && f->res.classid == classid) {
		if (cl)
			__tcf_bind_filter(q, &f->res, base);
		else
			__tcf_unbind_filter(q, &f->res);
	}
	tc_cls_bind_class(classid, cl, q, &f->res, base);
}

static int basic_dump(struct net *net, struct tcf_proto *tp, void *fh,
+1 −6
Original line number Diff line number Diff line
@@ -635,12 +635,7 @@ static void cls_bpf_bind_class(void *fh, u32 classid, unsigned long cl,
{
	struct cls_bpf_prog *prog = fh;

	if (prog && prog->res.classid == classid) {
		if (cl)
			__tcf_bind_filter(q, &prog->res, base);
		else
			__tcf_unbind_filter(q, &prog->res);
	}
	tc_cls_bind_class(classid, cl, q, &prog->res, base);
}

static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg,
+1 −6
Original line number Diff line number Diff line
@@ -3405,12 +3405,7 @@ static void fl_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
{
	struct cls_fl_filter *f = fh;

	if (f && f->res.classid == classid) {
		if (cl)
			__tcf_bind_filter(q, &f->res, base);
		else
			__tcf_unbind_filter(q, &f->res);
	}
	tc_cls_bind_class(classid, cl, q, &f->res, base);
}

static bool fl_delete_empty(struct tcf_proto *tp)
+1 −6
Original line number Diff line number Diff line
@@ -416,12 +416,7 @@ static void fw_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
{
	struct fw_filter *f = fh;

	if (f && f->res.classid == classid) {
		if (cl)
			__tcf_bind_filter(q, &f->res, base);
		else
			__tcf_unbind_filter(q, &f->res);
	}
	tc_cls_bind_class(classid, cl, q, &f->res, base);
}

static struct tcf_proto_ops cls_fw_ops __read_mostly = {
Loading