From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH v3 1/3] globalvar: suppress nvvar_save when no external environment was loaded
Date: Fri, 12 Dec 2025 17:22:07 +0100 [thread overview]
Message-ID: <20251212162222.1937214-2-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20251212162222.1937214-1-a.fatoum@pengutronix.de>
nvvar_save will load the external environment before writing it back
with nv changed, which we means we still end up parsing the environment
in this case, even if we don't execute init scripts or import nv out of
it.
Fix this to only parse the environment when we actually loaded it
before.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
v2 -> 3:
- still allow nv -s without previously loaded default environment, but
don't attempt to load the environment again
v1 -> v2:
- return error with message if saving without default environment
---
common/environment.c | 7 +++++++
common/globalvar.c | 9 ++++++++-
include/globalvar.h | 1 +
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/common/environment.c b/common/environment.c
index 0e551c90352e..ec14d0629a14 100644
--- a/common/environment.c
+++ b/common/environment.c
@@ -453,6 +453,7 @@ int envfs_load(const char *filename, const char *dir, unsigned flags)
int envfd;
int ret = 0;
size_t size, rsize;
+ __maybe_unused const char *defenv_path;
#ifdef __BAREBOX__
if (!IS_ALLOWED(SCONFIG_ENVIRONMENT_LOAD))
@@ -531,6 +532,12 @@ int envfs_load(const char *filename, const char *dir, unsigned flags)
ret = 0;
+#ifdef CONFIG_NVVAR
+ defenv_path = default_environment_path_get();
+ if (defenv_path && !strcmp(filename, defenv_path))
+ nv_var_set_persistable();
+#endif
+
out:
close(envfd);
free(buf);
diff --git a/common/globalvar.c b/common/globalvar.c
index 77af6733a6a0..127ecd5c6075 100644
--- a/common/globalvar.c
+++ b/common/globalvar.c
@@ -15,6 +15,7 @@
#include <fnmatch.h>
static int nv_dirty;
+static bool nv_persistable;
struct device global_device = {
.name = "global",
@@ -31,6 +32,11 @@ void nv_var_set_clean(void)
nv_dirty = 0;
}
+void nv_var_set_persistable(void)
+{
+ nv_persistable = true;
+}
+
void globalvar_remove(const char *name)
{
struct param_d *p, *tmp;
@@ -718,8 +724,9 @@ int nvvar_save(void)
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT))
defaultenv_load(TMPDIR, 0);
+ if (nv_persistable)
+ envfs_load(env, TMPDIR, 0);
- envfs_load(env, TMPDIR, 0);
unlink_recursive(TMPDIR "/nv", NULL);
dev_for_each_param(&nv_device, param) {
diff --git a/include/globalvar.h b/include/globalvar.h
index df32f22403bc..d0a8272588b4 100644
--- a/include/globalvar.h
+++ b/include/globalvar.h
@@ -148,6 +148,7 @@ static inline void globalvar_alias_deprecated(const char *newname, const char *o
#endif
void nv_var_set_clean(void);
+void nv_var_set_persistable(void);
int nvvar_save(void);
int nv_complete(struct string_list *sl, char *instr);
int global_complete(struct string_list *sl, char *instr);
--
2.47.3
next prev parent reply other threads:[~2025-12-12 16:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-12 16:22 [PATCH v3 0/3] environment: allow board code to suppress external env loading Ahmad Fatoum
2025-12-12 16:22 ` Ahmad Fatoum [this message]
2025-12-12 16:22 ` [PATCH v3 2/3] startup: bump down log message about lack of persistent environment Ahmad Fatoum
2025-12-12 16:22 ` [PATCH v3 3/3] environment: allow board code to suppress external env loading Ahmad Fatoum
2025-12-15 8:33 ` [PATCH v3 0/3] " Sascha Hauer
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=20251212162222.1937214-2-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
/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