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;
|
|
}
|