commit 5d85bb0cfe86c81e8b5e973098491faad23e66e0
parent 816199471f291e52ca42b1a6aa04deb0043a57a3
Author: sin <sin@2f30.org>
Date: Sat, 14 Jun 2014 16:48:10 +0100
Add fsfreeze(8)
Diffstat:
2 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -31,6 +31,7 @@ SRC = \
eject.c \
fallocate.c \
free.c \
+ fsfreeze.c \
getty.c \
halt.c \
hwclock.c \
diff --git a/fsfreeze.c b/fsfreeze.c
@@ -0,0 +1,51 @@
+/* See LICENSE file for copyright and license details. */
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "util.h"
+
+#define FIFREEZE _IOWR('X', 119, int /* Freeze */
+#define FITHAW _IOWR('X', 120, int) /* Thaw */
+
+static void
+usage(void)
+{
+ eprintf("usage: %s [-f] [-u] mountpoint\n", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int fflag = 0;
+ int uflag = 0;
+ long p = 1;
+ int fd;
+
+ ARGBEGIN {
+ case 'f':
+ fflag = 1;
+ break;
+ case 'u':
+ uflag = 1;
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc != 1)
+ usage();
+
+ if ((fflag ^ uflag) == 0)
+ usage();
+
+ fd = open(argv[0], O_RDONLY);
+ if (fd < 0)
+ eprintf("open: %s:", argv[0]);
+ ioctl(fd, fflag == 1 ? FIFREEZE : FITHAW, &p);
+ close(fd);
+ return EXIT_SUCCESS;
+}