[LEDE-DEV] [PATCH fstools] overlay: fix race condition when switching to jffs2

Roman Yeryomin roman at advem.lv
Fri Dec 15 06:10:30 PST 2017


There is a race between `cp -a /tmp/root/* /rom/overlay` from
libfstools/overlay.c and a process creating new file(s) before
pivot(/rom, /mnt) occured.
That is a process can create a file and it will not be copied.

To workaround this, do additional copy after jffs2 is ready.
This doesn't completely solve the problem but since there
was no other fix provided since original RFC [1], it is better
than nothiing.

[1] https://www.mail-archive.com/openwrt-devel@lists.openwrt.org/msg38218.html

Signed-off-by: Roman Yeryomin <roman at advem.lv>
---
 libfstools/overlay.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libfstools/overlay.c b/libfstools/overlay.c
index 7ada5ff..8423a57 100644
--- a/libfstools/overlay.c
+++ b/libfstools/overlay.c
@@ -243,6 +243,10 @@ jffs2_switch(struct volume *v)
 		ULOG_INFO("performing overlay whiteout\n");
 		umount2("/tmp/root", MNT_DETACH);
 		foreachdir("/overlay/", handle_whiteout);
+
+		/* try hard to be in sync */
+		ULOG_INFO("syncronizing overlay\n");
+		system("cp -a /tmp/root/upper/* / 2>/dev/null");
 		break;
 
 	case FS_EXT4:
-- 
2.14.1




More information about the Lede-dev mailing list