67918b32ab
NAME fallocate - preallocate or deallocate space to a file SYNOPSIS fallocate [-c|-p|-z] [-o offset] -l length [-n] filename fallocate -d [-o offset] [-l length] filename DESCRIPTION fallocate is used to manipulate the allocated disk space for a file, either to deallocate or preallocate it. For filesystems which support the fallocate system call, preallocation is done quickly by allocating blocks and marking them as uninitialized, requiring no IO to the data blocks. This is much faster than creating a file by filling it with zeroes. function old new delta fallocate_main - 179 +179 applet_names 2597 2606 +9 applet_main 1504 1508 +4 applet_suid 94 95 +1 applet_install_loc 188 189 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
55 lines
1.4 KiB
C
55 lines
1.4 KiB
C
/* vi: set sw=4 ts=4: */
|
|
/*
|
|
* Copyright (C) 2017 Denys Vlasenko <vda.linux@googlemail.com>
|
|
*
|
|
* Licensed under GPLv2, see file LICENSE in this source tree.
|
|
*/
|
|
|
|
//config:config FSFREEZE
|
|
//config: bool "fsfreeze"
|
|
//config: default y
|
|
//config: select PLATFORM_LINUX
|
|
//config: select LONG_OPTS
|
|
//config: help
|
|
//config: Halt new accesses and flush writes on a mounted filesystem.
|
|
|
|
//applet:IF_FSFREEZE(APPLET(fsfreeze, BB_DIR_USR_SBIN, BB_SUID_DROP))
|
|
|
|
//kbuild:lib-$(CONFIG_FSFREEZE) += fsfreeze.o
|
|
|
|
//usage:#define fsfreeze_trivial_usage
|
|
//usage: "--[un]freeze MOUNTPOINT"
|
|
//usage:#define fsfreeze_full_usage "\n\n"
|
|
//usage: "Flush and halt writes to MOUNTPOINT"
|
|
|
|
#include "libbb.h"
|
|
#include <linux/fs.h>
|
|
|
|
#ifndef FIFREEZE
|
|
# define FIFREEZE _IOWR('X', 119, int)
|
|
# define FITHAW _IOWR('X', 120, int)
|
|
#endif
|
|
|
|
int fsfreeze_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
|
int fsfreeze_main(int argc UNUSED_PARAM, char **argv)
|
|
{
|
|
unsigned opts;
|
|
int fd;
|
|
|
|
applet_long_options =
|
|
"freeze\0" No_argument "\xff"
|
|
"unfreeze\0" No_argument "\xfe"
|
|
;
|
|
/* exactly one non-option arg: the mountpoint */
|
|
/* one of opts is required */
|
|
/* opts are mutually exclusive */
|
|
opt_complementary = "=1:""\xff:\xfe:""\xff--\xfe:\xfe--\xff";
|
|
opts = getopt32(argv, "");
|
|
|
|
fd = xopen(argv[optind], O_RDONLY);
|
|
/* Works with NULL arg on linux-4.8.0 */
|
|
xioctl(fd, (opts & 1) ? FIFREEZE : FITHAW, NULL);
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|