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.

Currently I do additional copy after jffs2 is ready, which is kind of
cumbersome (see attached patch), but there are still few potentially
erroneous scenarios:
1. a process may recreate the file by the time second cp occurs
2. a process may delete a file (not existing at that moment) and
second cp will copy it again
3. a process may want to read created file before second cp occurs

If attached patch is the way to go I will properly submit it.
Otherwise there should be a more fundamental fix but I don't see a way
to fix this properly.


Regards,
Roman
--- a/libfstools/overlay.c
+++ b/libfstools/overlay.c
@@ -223,6 +223,9 @@ 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;
 
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to