diff options
author | Nick Kralevich <nnk@google.com> | 2014-07-24 17:05:59 -0700 |
---|---|---|
committer | Nick Kralevich <nnk@google.com> | 2014-07-24 17:05:59 -0700 |
commit | 8d28fa71fce6a5623488614250970ce78551a924 (patch) | |
tree | a3069bf2c33a3a8df6e557c9da625b08da9b6a9d /sdcard/sdcard.c | |
parent | e5ab3e3a4c23077ede0515320c5585a99b236671 (diff) | |
download | core-8d28fa71fce6a5623488614250970ce78551a924.tar.gz core-8d28fa71fce6a5623488614250970ce78551a924.tar.bz2 core-8d28fa71fce6a5623488614250970ce78551a924.zip |
sdcard: ensure installd fs upgrade has completed
Before running the sdcard daemon, make sure that installd has
completed all upgrades to /data that it needs to complete.
This avoids race conditions between installd and the sdcard daemon.
Maybe fixes bug 16329437.
Bug: 16329437
Change-Id: I5e164f08009c1036469f8734ec07cbae9c5e262b
Diffstat (limited to 'sdcard/sdcard.c')
-rw-r--r-- | sdcard/sdcard.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sdcard/sdcard.c b/sdcard/sdcard.c index d3afcb1c5..d9c9c077e 100644 --- a/sdcard/sdcard.c +++ b/sdcard/sdcard.c @@ -1856,6 +1856,7 @@ int main(int argc, char **argv) bool split_perms = false; int i; struct rlimit rlim; + int fs_version; int opt; while ((opt = getopt(argc, argv, "u:g:w:t:dls")) != -1) { @@ -1930,6 +1931,11 @@ int main(int argc, char **argv) ERROR("Error setting RLIMIT_NOFILE, errno = %d\n", errno); } + while ((fs_read_atomic_int("/data/.layout_version", &fs_version) == -1) || (fs_version < 3)) { + ERROR("installd fs upgrade not yet complete. Waiting...\n"); + sleep(1); + } + res = run(source_path, dest_path, uid, gid, write_gid, num_threads, derive, split_perms); return res < 0 ? 1 : 0; } |