lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20221215020155.1619839-14-kuba@kernel.org> Date: Wed, 14 Dec 2022 18:01:53 -0800 From: Jakub Kicinski <kuba@...nel.org> To: davem@...emloft.net Cc: netdev@...r.kernel.org, edumazet@...gle.com, pabeni@...hat.com, jiri@...nulli.us, jacob.e.keller@...el.com, leon@...nel.org, Jakub Kicinski <kuba@...nel.org> Subject: [RFC net-next 13/15] devlink: uniformly take the devlink instance lock in the dump loop Move the lock taking out of devlink_nl_cmd_region_get_devlink_dumpit(). This way all dumps will take the instance lock in the main iteration loop directly, making refactoring and reading the code easier. Signed-off-by: Jakub Kicinski <kuba@...nel.org> --- net/devlink/basic.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/net/devlink/basic.c b/net/devlink/basic.c index d01089b65ddc..c6ad8133fc23 100644 --- a/net/devlink/basic.c +++ b/net/devlink/basic.c @@ -6050,9 +6050,8 @@ static int devlink_nl_cmd_region_get_devlink_dumpit(struct sk_buff *msg, struct devlink_region *region; struct devlink_port *port; unsigned long port_index; - int err = 0; + int err; - devl_lock(devlink); list_for_each_entry(region, &devlink->region_list, list) { if (*idx < start) { (*idx)++; @@ -6064,7 +6063,7 @@ static int devlink_nl_cmd_region_get_devlink_dumpit(struct sk_buff *msg, cb->nlh->nlmsg_seq, NLM_F_MULTI, region); if (err) - goto out; + return err; (*idx)++; } @@ -6072,12 +6071,10 @@ static int devlink_nl_cmd_region_get_devlink_dumpit(struct sk_buff *msg, err = devlink_nl_cmd_region_get_port_dumpit(msg, cb, port, idx, start); if (err) - goto out; + return err; } -out: - devl_unlock(devlink); - return err; + return 0; } static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg, @@ -6090,8 +6087,10 @@ static int devlink_nl_cmd_region_get_dumpit(struct sk_buff *msg, devlink_dump_for_each_instance_get(msg, dump, devlink) { int idx = 0; + devl_lock(devlink); err = devlink_nl_cmd_region_get_devlink_dumpit(msg, cb, devlink, &idx, dump->idx); + devl_unlock(devlink); devlink_put(devlink); if (err) { dump->idx = idx; -- 2.38.1
Powered by blists - more mailing lists