From: Jeremy Sowden <jeremy@azazel.net>
To: Netfilter Devel <netfilter-devel@vger.kernel.org>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>, Phil Sutter <phil@nwl.cc>
Subject: [PATCH nft v2 1/2] libnftables: got rid of repeated initialization of netlink_ctx variable in loop.
Date: Fri, 19 Jul 2019 12:10:09 +0100 [thread overview]
Message-ID: <20190719111010.14421-2-jeremy@azazel.net> (raw)
In-Reply-To: <20190719111010.14421-1-jeremy@azazel.net>
Most members in the context doesn't change, so there is no need to
memset it and reassign them on every iteration. Moved that code out of
the loop.
Fixes: a72315d2bad4 ("src: add rule batching support")
Reported-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
---
src/libnftables.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/src/libnftables.c b/src/libnftables.c
index 2f77a7709e2c..4a139c58b2b3 100644
--- a/src/libnftables.c
+++ b/src/libnftables.c
@@ -22,8 +22,12 @@ static int nft_netlink(struct nft_ctx *nft,
struct mnl_socket *nf_sock)
{
uint32_t batch_seqnum, seqnum = 0, num_cmds = 0;
- struct nftnl_batch *batch;
- struct netlink_ctx ctx;
+ struct netlink_ctx ctx = {
+ .nft = nft,
+ .msgs = msgs,
+ .list = LIST_HEAD_INIT(ctx.list),
+ .batch = mnl_batch_init(),
+ };
struct cmd *cmd;
struct mnl_err *err, *tmp;
LIST_HEAD(err_list);
@@ -32,16 +36,9 @@ static int nft_netlink(struct nft_ctx *nft,
if (list_empty(cmds))
return 0;
- batch = mnl_batch_init();
-
- batch_seqnum = mnl_batch_begin(batch, mnl_seqnum_alloc(&seqnum));
+ batch_seqnum = mnl_batch_begin(ctx.batch, mnl_seqnum_alloc(&seqnum));
list_for_each_entry(cmd, cmds, list) {
- memset(&ctx, 0, sizeof(ctx));
- ctx.msgs = msgs;
ctx.seqnum = cmd->seqnum = mnl_seqnum_alloc(&seqnum);
- ctx.batch = batch;
- ctx.nft = nft;
- init_list_head(&ctx.list);
ret = do_command(&ctx, cmd);
if (ret < 0) {
netlink_io_error(&ctx, &cmd->location,
@@ -52,9 +49,9 @@ static int nft_netlink(struct nft_ctx *nft,
num_cmds++;
}
if (!nft->check)
- mnl_batch_end(batch, mnl_seqnum_alloc(&seqnum));
+ mnl_batch_end(ctx.batch, mnl_seqnum_alloc(&seqnum));
- if (!mnl_batch_ready(batch))
+ if (!mnl_batch_ready(ctx.batch))
goto out;
ret = mnl_batch_talk(&ctx, &err_list, num_cmds);
@@ -83,7 +80,7 @@ static int nft_netlink(struct nft_ctx *nft,
}
}
out:
- mnl_batch_reset(batch);
+ mnl_batch_reset(ctx.batch);
return ret;
}
--
2.20.1
next prev parent reply other threads:[~2019-07-19 11:10 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-16 18:31 json_cmd_assoc and cmd Pablo Neira Ayuso
2019-07-16 19:02 ` Phil Sutter
2019-07-16 19:39 ` Pablo Neira Ayuso
2019-07-18 12:37 ` Jeremy Sowden
2019-07-18 14:11 ` Phil Sutter
2019-07-18 14:57 ` Pablo Neira Ayuso
2019-07-18 15:07 ` Jeremy Sowden
2019-07-18 21:05 ` [PATCH nft] libnftables: got rid of repeated initialization of netlink_ctx variable in loop Jeremy Sowden
2019-07-19 10:32 ` Phil Sutter
2019-07-19 11:10 ` [PATCH nft v2 0/2] netlink_ctx initialization fixes Jeremy Sowden
2019-07-19 11:10 ` Jeremy Sowden [this message]
2019-07-19 11:17 ` [PATCH nft v2 1/2] libnftables: got rid of repeated initialization of netlink_ctx variable in loop Phil Sutter
2019-07-19 11:10 ` [PATCH nft v2 2/2] rule: removed duplicate member initializer Jeremy Sowden
2019-07-19 11:17 ` Phil Sutter
2019-07-22 21:29 ` [PATCH nft v2 0/2] netlink_ctx initialization fixes Pablo Neira Ayuso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190719111010.14421-2-jeremy@azazel.net \
--to=jeremy@azazel.net \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=phil@nwl.cc \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).