Commit ff14adbd authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller
Browse files

genetlink: refactor the cmd <> policy mapping dump



The code at the top of ctrl_dumppolicy() dumps mappings between
ops and policies. It supports dumping both the entire family and
single op if dump is filtered. But both of those cases are handled
inside a loop, which makes the logic harder to follow and change.
Refactor to split the two cases more clearly.

Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e2dbda0f
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -1319,7 +1319,6 @@ static int ctrl_dumppolicy(struct sk_buff *skb, struct netlink_callback *cb)
	void *hdr;

	if (!ctx->policies) {
		while (ctx->opidx < genl_get_cmd_cnt(ctx->rt)) {
		struct genl_ops op;

		if (ctx->single_op) {
@@ -1327,14 +1326,18 @@ static int ctrl_dumppolicy(struct sk_buff *skb, struct netlink_callback *cb)

			err = genl_get_cmd(ctx->op, ctx->rt, &op);
			if (WARN_ON(err))
				return err;

			if (ctrl_dumppolicy_put_op(skb, cb, &op))
				return skb->len;

				/* break out of the loop after this one */
			/* don't enter the loop below */
			ctx->opidx = genl_get_cmd_cnt(ctx->rt);
			} else {
				genl_get_cmd_by_index(ctx->opidx, ctx->rt, &op);
		}

		while (ctx->opidx < genl_get_cmd_cnt(ctx->rt)) {
			genl_get_cmd_by_index(ctx->opidx, ctx->rt, &op);

			if (ctrl_dumppolicy_put_op(skb, cb, &op))
				return skb->len;