static int jffs2_reset(struct volume *v, int reset) { char *mp; mp = find_mount_point(v->blk, 1); if (mp) { ULOG_INFO("%s is mounted as %s, only erasing files\n", v->blk, mp); fs_state_set("/overlay", FS_STATE_PENDING); overlay_delete(mp, false); mount(mp, "/", NULL, MS_REMOUNT, 0); } else { ULOG_INFO("%s is not mounted\n", v->blk); return jffs2_mark(v); } if (reset) { sync(); sleep(2); reboot(RB_AUTOBOOT); while (1) ; } return 0; }
/* * Called at the end of init, it can wait for filesystem if needed. */ static int done(int argc, char *argv[1]) { struct volume *v = volume_find("rootfs_data"); if (!v) return -1; switch (volume_identify(v)) { case FS_NONE: case FS_DEADCODE: return jffs2_switch(v); case FS_JFFS2: case FS_UBIFS: fs_state_set("/overlay", FS_STATE_READY); break; } return 0; }