[OE-core] [PATCH 08/20] udev-cache: Create cache asynchronously

Richard Tollerton rich.tollerton at ni.com
Mon Aug 4 21:18:08 UTC 2014


Otavio Salvador <otavio at ossystems.com.br> writes:

> I am not sure about this one. I see the value you are adding here but
> I worry how often something can be connected during this process and
> change the contents along the way. Did you see something as that
> during your tests?

No, but point taken. I didn't really test "physical" hotplug during
bootup -- and in particular, for this to be a persisting issue, the
added/removed device must be removed/added during this boot -- but I
suppose that is totally possible.

This reflects an underlying race condition, starting at the computation
of NEWDATA/OLDDATA in the udev initscript, and ending in the tarball
creation in udev-cache. I suppose that we can mitigate this by spinning
in udev-cache until the devcache stops changing...? Cheesy, untested,
dirty RFC follows:

diff --git a/meta/recipes-core/udev/udev/udev-cache b/meta/recipes-core/udev/udev/udev-cache
index 9ad3b4d..3b744c5 100644
--- a/meta/recipes-core/udev/udev/udev-cache
+++ b/meta/recipes-core/udev/udev/udev-cache
@@ -28,6 +28,13 @@ fi
 [ -e "$DEVCACHE_CURRENT_SYSCONF" ] || exit 0
 [ "${VERBOSE}" == "no" ] || echo "found; building cache."
 
+# assume readfiles and CMP_FILE_LIST are copied from udev initscript
+readfiles "$DEVCACHE_SYSCONF"
+DATA2="$READDATA"
+
+while true; do
+	DATA1="$DATA2"
+
 	if [ ! `readlink -f /bin/tar` = "/bin/tar.tar" ]; then
 		(
 			find /dev \( -type b -o -type c -o -type l \) -xdev | cut -c 2- | xargs tar czf "${DEVCACHE}.tmp" -C / $BUSYBOX_DEVCACHE_CREATE_OPTS && \
@@ -42,4 +49,13 @@ else
 		) &
 	fi
 
+	readfiles $CMP_FILE_LIST
+	DATA2="$READDATA$RULELIST"
+	if [ "$DATA1" = "$DATA2" ]; then
+		break
+	else
+		echo "$DATA2" > "$DEVCACHE_CURRENT_SYSCONF"
+	fi
+done
+
 exit 0


> -- 
> Otavio Salvador                             O.S. Systems
> http://www.ossystems.com.br        http://code.ossystems.com.br
> Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750
> -- 

-- 
Richard Tollerton <rich.tollerton at ni.com>



More information about the Openembedded-core mailing list