summaryrefslogtreecommitdiff
path: root/update.c
diff options
context:
space:
mode:
Diffstat (limited to 'update.c')
-rw-r--r--update.c48
1 files changed, 48 insertions, 0 deletions
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;
+}