This feature is enabling by ORing in 0x04 to the yaffs_auto_checkpoint
module parameter. This will do a one-shot checkpoint on the next sync and
the bit will then be reset.
This is a nice way to force a checkpoint on the next sync. eg.
echo 6 > /sys/modules/yaffs/parameters/yaffs_auto_checkpoint
sync
yaffs_auto_checkpoint will now be 2
Signed-off-by: Charles Manning <cdhmanning@gmail.com>
{
yaffs_Device *dev = yaffs_SuperToDevice(sb);
{
yaffs_Device *dev = yaffs_SuperToDevice(sb);
+ unsigned int oneshot_checkpoint = (yaffs_auto_checkpoint & 4);
+
T(YAFFS_TRACE_OS | YAFFS_TRACE_SYNC,
T(YAFFS_TRACE_OS | YAFFS_TRACE_SYNC,
- ("yaffs_do_sync_fs: %s %s\n",
+ ("yaffs_do_sync_fs: %s %s%s\n",
sb->s_dirt ? "dirty" : "clean",
sb->s_dirt ? "dirty" : "clean",
- do_checkpoint ? "with checkpoint" : "no checkpoint"));
+ do_checkpoint ? "with checkpoint" : "no checkpoint",
+ oneshot_checkpoint ? " one-shot" : "" ));
+ if (sb->s_dirt || oneshot_checkpoint) {
yaffs_GrossLock(dev);
yaffs_FlushSuperBlock(sb,do_checkpoint);
yaffs_GrossUnlock(dev);
sb->s_dirt = 0;
yaffs_GrossLock(dev);
yaffs_FlushSuperBlock(sb,do_checkpoint);
yaffs_GrossUnlock(dev);
sb->s_dirt = 0;
+
+ if(oneshot_checkpoint)
+ yaffs_auto_checkpoint &= ~4;