Patchwork [1/1] udev-cache: take a read-only rootfs into consideration

login
register
mail settings
Submitter Qi.Chen@windriver.com
Date June 28, 2013, 5 a.m.
Message ID <a09510a0b0b388029c673ff1725a09e6ae99856d.1372389991.git.Qi.Chen@windriver.com>
Download mbox | patch
Permalink /patch/52515/
State New
Headers show

Comments

Qi.Chen@windriver.com - June 28, 2013, 5 a.m.
From: Chen Qi <Qi.Chen@windriver.com>

In case of a read-only rootfs, no matter the /etc is read-only or
it's bind mounted with tmpfs, the udev cache handling should be
skipped, as the data cannot be persisted between reboots.

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
 meta/recipes-core/udev/udev/init       |    5 +++--
 meta/recipes-core/udev/udev/udev-cache |    6 ++++++
 2 files changed, 9 insertions(+), 2 deletions(-)
Saul Wold - June 28, 2013, 5:59 a.m.
On 06/27/2013 10:00 PM, Qi.Chen@windriver.com wrote:
> From: Chen Qi <Qi.Chen@windriver.com>
>
> In case of a read-only rootfs, no matter the /etc is read-only or
> it's bind mounted with tmpfs, the udev cache handling should be
> skipped, as the data cannot be persisted between reboots.
>
> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
> ---
>   meta/recipes-core/udev/udev/init       |    5 +++--
>   meta/recipes-core/udev/udev/udev-cache |    6 ++++++
>   2 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/meta/recipes-core/udev/udev/init b/meta/recipes-core/udev/udev/init
> index 9b81700..38ea666 100644
> --- a/meta/recipes-core/udev/udev/init
> +++ b/meta/recipes-core/udev/udev/init
> @@ -18,6 +18,7 @@ export TZ=/etc/localtime
>   [ -x @UDEVD@ ] || exit 1
>   [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
>   [ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
> +[ -f /etc/default/rcS ] && . /etc/default/rcS
>
>   readfile () {
>      filename=$1
> @@ -52,8 +53,8 @@ case "$1" in
>       mount -a -t tmpfs 2>/dev/null
>       mkdir -p /var/volatile/tmp
>
> -    # cache handling
> -    if [ "$DEVCACHE" != "" ]; then
> +    # Cache handling. Skip cache handling in case of a read-only rootfs.
> +    if [ "$ROOTFS_READ_ONLY" = "no" -a "$DEVCACHE" != "" ]; then
>               readfile /proc/version
>               VERSION="$READDATA"
>               readfile /proc/cmdline
Do you think it would be possible in a fix embedded device to have the 
udev cache created and installed in a read-only FS?

Sau!

> diff --git a/meta/recipes-core/udev/udev/udev-cache b/meta/recipes-core/udev/udev/udev-cache
> index 8a84fa9..3e0eff6 100644
> --- a/meta/recipes-core/udev/udev/udev-cache
> +++ b/meta/recipes-core/udev/udev/udev-cache
> @@ -15,8 +15,14 @@ export TZ=/etc/localtime
>   [ -x @UDEVD@ ] || exit 1
>   [ -d /sys/class ] || exit 1
>
> +[ -f /etc/default/rcS ] && . /etc/default/rcS
>   [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
>
> +if [ "$ROOTFS_READ_ONLY" = "yes" ]; then
> +    [ "$VERBOSE" != "no" ] && echo "read-only rootfs, skip udev-cache"
> +    exit 0
> +fi
> +
>   if [ "$DEVCACHE" != "" -a -e /dev/shm/udev.cache ]; then
>   	echo "Populating dev cache"
>   	(cd /; tar cf "$DEVCACHE" dev)
>
Qi.Chen@windriver.com - June 28, 2013, 6:21 a.m.
On 06/28/2013 01:59 PM, Saul Wold wrote:
> On 06/27/2013 10:00 PM, Qi.Chen@windriver.com wrote:
>> From: Chen Qi <Qi.Chen@windriver.com>
>>
>> In case of a read-only rootfs, no matter the /etc is read-only or
>> it's bind mounted with tmpfs, the udev cache handling should be
>> skipped, as the data cannot be persisted between reboots.
>>
>> Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
>> ---
>>   meta/recipes-core/udev/udev/init       |    5 +++--
>>   meta/recipes-core/udev/udev/udev-cache |    6 ++++++
>>   2 files changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/meta/recipes-core/udev/udev/init 
>> b/meta/recipes-core/udev/udev/init
>> index 9b81700..38ea666 100644
>> --- a/meta/recipes-core/udev/udev/init
>> +++ b/meta/recipes-core/udev/udev/init
>> @@ -18,6 +18,7 @@ export TZ=/etc/localtime
>>   [ -x @UDEVD@ ] || exit 1
>>   [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
>>   [ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
>> +[ -f /etc/default/rcS ] && . /etc/default/rcS
>>
>>   readfile () {
>>      filename=$1
>> @@ -52,8 +53,8 @@ case "$1" in
>>       mount -a -t tmpfs 2>/dev/null
>>       mkdir -p /var/volatile/tmp
>>
>> -    # cache handling
>> -    if [ "$DEVCACHE" != "" ]; then
>> +    # Cache handling. Skip cache handling in case of a read-only 
>> rootfs.
>> +    if [ "$ROOTFS_READ_ONLY" = "no" -a "$DEVCACHE" != "" ]; then
>>               readfile /proc/version
>>               VERSION="$READDATA"
>>               readfile /proc/cmdline
> Do you think it would be possible in a fix embedded device to have the 
> udev cache created and installed in a read-only FS?
>
> Sau!
>
Thanks for pointing it out.
Yes, you're right.
No matter how the cache is installed, if the $DEVCACHE file exists and 
the $READDATA matches, we could use the cache.
I'll send out a V2.

//Chen Qi

>> diff --git a/meta/recipes-core/udev/udev/udev-cache 
>> b/meta/recipes-core/udev/udev/udev-cache
>> index 8a84fa9..3e0eff6 100644
>> --- a/meta/recipes-core/udev/udev/udev-cache
>> +++ b/meta/recipes-core/udev/udev/udev-cache
>> @@ -15,8 +15,14 @@ export TZ=/etc/localtime
>>   [ -x @UDEVD@ ] || exit 1
>>   [ -d /sys/class ] || exit 1
>>
>> +[ -f /etc/default/rcS ] && . /etc/default/rcS
>>   [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
>>
>> +if [ "$ROOTFS_READ_ONLY" = "yes" ]; then
>> +    [ "$VERBOSE" != "no" ] && echo "read-only rootfs, skip udev-cache"
>> +    exit 0
>> +fi
>> +
>>   if [ "$DEVCACHE" != "" -a -e /dev/shm/udev.cache ]; then
>>       echo "Populating dev cache"
>>       (cd /; tar cf "$DEVCACHE" dev)
>>
>
>

Patch

diff --git a/meta/recipes-core/udev/udev/init b/meta/recipes-core/udev/udev/init
index 9b81700..38ea666 100644
--- a/meta/recipes-core/udev/udev/init
+++ b/meta/recipes-core/udev/udev/init
@@ -18,6 +18,7 @@  export TZ=/etc/localtime
 [ -x @UDEVD@ ] || exit 1
 [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
 [ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
+[ -f /etc/default/rcS ] && . /etc/default/rcS
 
 readfile () {
    filename=$1
@@ -52,8 +53,8 @@  case "$1" in
     mount -a -t tmpfs 2>/dev/null
     mkdir -p /var/volatile/tmp
 
-    # cache handling
-    if [ "$DEVCACHE" != "" ]; then
+    # Cache handling. Skip cache handling in case of a read-only rootfs.
+    if [ "$ROOTFS_READ_ONLY" = "no" -a "$DEVCACHE" != "" ]; then
             readfile /proc/version
             VERSION="$READDATA"
             readfile /proc/cmdline
diff --git a/meta/recipes-core/udev/udev/udev-cache b/meta/recipes-core/udev/udev/udev-cache
index 8a84fa9..3e0eff6 100644
--- a/meta/recipes-core/udev/udev/udev-cache
+++ b/meta/recipes-core/udev/udev/udev-cache
@@ -15,8 +15,14 @@  export TZ=/etc/localtime
 [ -x @UDEVD@ ] || exit 1
 [ -d /sys/class ] || exit 1
 
+[ -f /etc/default/rcS ] && . /etc/default/rcS
 [ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
 
+if [ "$ROOTFS_READ_ONLY" = "yes" ]; then
+    [ "$VERBOSE" != "no" ] && echo "read-only rootfs, skip udev-cache"
+    exit 0
+fi
+
 if [ "$DEVCACHE" != "" -a -e /dev/shm/udev.cache ]; then
 	echo "Populating dev cache"
 	(cd /; tar cf "$DEVCACHE" dev)