Initial revision
diff --git a/update.c b/update.c
new file mode 100644
index 0000000..f3b7fc0
--- /dev/null
+++ b/update.c
@@ -0,0 +1,48 @@
+#include "internal.h"
+#include <linux/unistd.h>
+
+const char	update_usage[] = "update\n"
+"\n"
+"\tFlush buffered data to the disk devices every 30 seconds.\n";
+
+#if defined(__GLIBC__)
+#include <sys/kdaemon.h>
+#else
+_syscall2(int, bdflush, int, func, int, data);
+#endif /* __GLIBC__ */
+
+extern int
+update_main(struct FileInfo * i, int argc, char * * argv)
+{
+	/*
+	 * Update is actually two daemons, bdflush and update.
+	 */
+	int	pid;
+
+	pid = fork();
+	if ( pid < 0 )
+		return pid;
+	else if ( pid == 0 ) {
+		/*
+		 * This is no longer necessary since 1.3.5x, but it will harmlessly
+		 * exit if that is the case.
+		 */
+		strcpy(argv[0], "bdflush (update)");
+		argv[1] = 0;
+		argv[2] = 0;
+		bdflush(1, 0);
+		_exit(0);
+	}
+	pid = fork();
+	if ( pid < 0 )
+		return pid;
+	else if ( pid == 0 ) {
+		argv[0] = "update";
+		for ( ; ; ) {
+			sync();
+			sleep(30);
+		}
+	}
+
+	return 0;
+}