All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [git commit branch/2021.02.x] package/util-linux: fix mount -a
@ 2022-02-27 19:34 Peter Korsgaard
  0 siblings, 0 replies; only message in thread
From: Peter Korsgaard @ 2022-02-27 19:34 UTC (permalink / raw)
  To: buildroot

commit: https://git.buildroot.net/buildroot/commit/?id=477fa607517c892e21e5d667457276a250d12819
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/2021.02.x

Fixes:
 - https://bugs.buildroot.org/show_bug.cgi?id=14351

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
(cherry picked from commit 2f5068640161f7b267099e28b69d4c2280b4ded3)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
 ...mark-cache-as-probed-if-sys-not-available.patch | 141 +++++++++++++++++++++
 1 file changed, 141 insertions(+)

diff --git a/package/util-linux/0002-libblkid-don-t-mark-cache-as-probed-if-sys-not-available.patch b/package/util-linux/0002-libblkid-don-t-mark-cache-as-probed-if-sys-not-available.patch
new file mode 100644
index 0000000000..bfc8f60834
--- /dev/null
+++ b/package/util-linux/0002-libblkid-don-t-mark-cache-as-probed-if-sys-not-available.patch
@@ -0,0 +1,141 @@
+From 84d38ae3eca523ef990cb848563cc63de25266e6 Mon Sep 17 00:00:00 2001
+From: Karel Zak <kzak@redhat.com>
+Date: Fri, 19 Nov 2021 14:19:03 +0100
+Subject: [PATCH] libblkid: don't mark cache as "probed" if /sys not available
+
+For "mount --all" we need to read the cache more than once in a short
+time. The library checks the delay between probes, and if the delay is
+too short, it does not read devices. This is a problem on boot when there
+are no /sys, and the cache is empty. In this case, we need to check
+for /sys until it's available constantly.
+
+https://github.com/util-linux/util-linux/issues/1492
+Signed-off-by: Karel Zak <kzak@redhat.com>
+
+[Retrieved from:
+https://github.com/util-linux/util-linux/commit/84d38ae3eca523ef990cb848563cc63de25266e6]
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ libblkid/src/devname.c | 26 +++++++++++++++++---------
+ libblkid/src/resolve.c |  2 +-
+ libblkid/src/tag.c     |  8 +++++---
+ 3 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/libblkid/src/devname.c b/libblkid/src/devname.c
+index 90a8245fc9..9a173e3489 100644
+--- a/libblkid/src/devname.c
++++ b/libblkid/src/devname.c
+@@ -429,6 +429,8 @@ sysfs_probe_all(blkid_cache cache, int only_if_new, int only_removable)
+ 	if (!sysfs)
+ 		return -BLKID_ERR_SYSFS;
+ 
++	DBG(DEVNAME, ul_debug(" probe /sys/block"));
++
+ 	/* scan /sys/block */
+ 	while ((dev = xreaddir(sysfs))) {
+ 		DIR *dir = NULL;
+@@ -533,14 +535,18 @@ sysfs_probe_all(blkid_cache cache, int only_if_new, int only_removable)
+ /*
+  * Read the device data for all available block devices in the system.
+  */
+-static int probe_all(blkid_cache cache, int only_if_new)
++static int probe_all(blkid_cache cache, int only_if_new, int update_interval)
+ {
++	int rc;
++
+ 	if (!cache)
+ 		return -BLKID_ERR_PARAM;
+ 
+ 	if (cache->bic_flags & BLKID_BIC_FL_PROBED &&
+-	    time(NULL) - cache->bic_time < BLKID_PROBE_INTERVAL)
++	    time(NULL) - cache->bic_time < BLKID_PROBE_INTERVAL) {
++		DBG(PROBE, ul_debug("don't re-probe [delay < %d]", BLKID_PROBE_INTERVAL));
+ 		return 0;
++	}
+ 
+ 	blkid_read_cache(cache);
+ #ifdef VG_DIR
+@@ -548,7 +554,13 @@ static int probe_all(blkid_cache cache, int only_if_new)
+ #endif
+ 	ubi_probe_all(cache, only_if_new);
+ 
+-	sysfs_probe_all(cache, only_if_new, 0);
++	rc = sysfs_probe_all(cache, only_if_new, 0);
++
++	/* Don't mark the change as "probed" if /sys not avalable */
++	if (update_interval && rc == 0) {
++		cache->bic_time = time(NULL);
++		cache->bic_flags |= BLKID_BIC_FL_PROBED;
++	}
+ 
+ 	blkid_flush_cache(cache);
+ 	return 0;
+@@ -567,11 +579,7 @@ int blkid_probe_all(blkid_cache cache)
+ 	int ret;
+ 
+ 	DBG(PROBE, ul_debug("Begin blkid_probe_all()"));
+-	ret = probe_all(cache, 0);
+-	if (ret == 0) {
+-		cache->bic_time = time(NULL);
+-		cache->bic_flags |= BLKID_BIC_FL_PROBED;
+-	}
++	ret = probe_all(cache, 0, 1);
+ 	DBG(PROBE, ul_debug("End blkid_probe_all() [rc=%d]", ret));
+ 	return ret;
+ }
+@@ -589,7 +597,7 @@ int blkid_probe_all_new(blkid_cache cache)
+ 	int ret;
+ 
+ 	DBG(PROBE, ul_debug("Begin blkid_probe_all_new()"));
+-	ret = probe_all(cache, 1);
++	ret = probe_all(cache, 1, 0);
+ 	DBG(PROBE, ul_debug("End blkid_probe_all_new() [rc=%d]", ret));
+ 	return ret;
+ }
+diff --git a/libblkid/src/resolve.c b/libblkid/src/resolve.c
+index 641b022860..16653fa8e1 100644
+--- a/libblkid/src/resolve.c
++++ b/libblkid/src/resolve.c
+@@ -32,7 +32,7 @@ char *blkid_get_tag_value(blkid_cache cache, const char *tagname,
+ 	blkid_cache c = cache;
+ 	char *ret = NULL;
+ 
+-	DBG(TAG, ul_debug("looking for %s on %s", tagname, devname));
++	DBG(TAG, ul_debug("looking for tag %s on %s device", tagname, devname));
+ 
+ 	if (!devname)
+ 		return NULL;
+diff --git a/libblkid/src/tag.c b/libblkid/src/tag.c
+index 390a648648..178336505f 100644
+--- a/libblkid/src/tag.c
++++ b/libblkid/src/tag.c
+@@ -326,14 +326,14 @@ blkid_dev blkid_find_dev_with_tag(blkid_cache cache,
+ 	blkid_dev	dev;
+ 	int		pri;
+ 	struct list_head *p;
+-	int		probe_new = 0;
++	int		probe_new = 0, probe_all = 0;
+ 
+ 	if (!cache || !type || !value)
+ 		return NULL;
+ 
+ 	blkid_read_cache(cache);
+ 
+-	DBG(TAG, ul_debug("looking for %s=%s in cache", type, value));
++	DBG(TAG, ul_debug("looking for tag %s=%s in cache", type, value));
+ 
+ try_again:
+ 	pri = -1;
+@@ -366,9 +366,11 @@ blkid_dev blkid_find_dev_with_tag(blkid_cache cache,
+ 		goto try_again;
+ 	}
+ 
+-	if (!dev && !(cache->bic_flags & BLKID_BIC_FL_PROBED)) {
++	if (!dev && !probe_all
++	    && !(cache->bic_flags & BLKID_BIC_FL_PROBED)) {
+ 		if (blkid_probe_all(cache) < 0)
+ 			return NULL;
++		probe_all++;
+ 		goto try_again;
+ 	}
+ 	return dev;
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-02-27 19:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-27 19:34 [Buildroot] [git commit branch/2021.02.x] package/util-linux: fix mount -a Peter Korsgaard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.