summaryrefslogtreecommitdiffstats
path: root/sys-utils/fallocate.c
diff options
context:
space:
mode:
authorCong Wang2011-11-18 09:51:37 +0100
committerKarel Zak2011-11-23 13:12:48 +0100
commit411fd3c27aed72c50677aaf006ebfa6df39a1cfc (patch)
treeb40cc09d92913b9c8fda2eb1c713e8bbc0177e7c /sys-utils/fallocate.c
parentprlimit: s/amount/number/ (diff)
downloadkernel-qcow2-util-linux-411fd3c27aed72c50677aaf006ebfa6df39a1cfc.tar.gz
kernel-qcow2-util-linux-411fd3c27aed72c50677aaf006ebfa6df39a1cfc.tar.xz
kernel-qcow2-util-linux-411fd3c27aed72c50677aaf006ebfa6df39a1cfc.zip
fallocate: add FALLOC_FL_PUNCH_HOLE support
Recent Linux kernel supports FALLOC_FL_PUNCH_HOLE in fallocate(2). This patch adds FALLOC_FL_PUNCH_HOLE support to fallocate utility, by introducing a new option -p|--punch-hole. [kzak@redhat.com: - fix merge conflict in fallocate.1] Cc: Karel Zak <kzak@redhat.com> Cc: Eric Sandeen <sandeen@redhat.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/fallocate.c')
-rw-r--r--sys-utils/fallocate.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys-utils/fallocate.c b/sys-utils/fallocate.c
index 13d7277fe..b58485a78 100644
--- a/sys-utils/fallocate.c
+++ b/sys-utils/fallocate.c
@@ -40,6 +40,7 @@
# include <linux/falloc.h> /* for FALLOC_FL_* flags */
#else
# define FALLOC_FL_KEEP_SIZE 1
+# define FALLOC_FL_PUNCH_HOLE 2
#endif
#include "nls.h"
@@ -57,6 +58,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
fputs(_("\nOptions:\n"), out);
fputs(_(" -h, --help this help\n"
" -n, --keep-size don't modify the length of the file\n"
+ " -p, --punch-hole punch holes in the file\n"
" -o, --offset <num> offset of the allocation, in bytes\n"
" -l, --length <num> length of the allocation, in bytes\n"), out);
@@ -88,6 +90,7 @@ int main(int argc, char **argv)
static const struct option longopts[] = {
{ "help", 0, 0, 'h' },
{ "keep-size", 0, 0, 'n' },
+ { "punch-hole", 0, 0, 'p' },
{ "offset", 1, 0, 'o' },
{ "length", 1, 0, 'l' },
{ NULL, 0, 0, 0 }
@@ -97,11 +100,14 @@ int main(int argc, char **argv)
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
- while ((c = getopt_long(argc, argv, "hnl:o:", longopts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "hnpl:o:", longopts, NULL)) != -1) {
switch(c) {
case 'h':
usage(stdout);
break;
+ case 'p':
+ mode |= FALLOC_FL_PUNCH_HOLE;
+ /* fall through */
case 'n':
mode |= FALLOC_FL_KEEP_SIZE;
break;