[Patch] fallocate: add FALLOC_FL_PUNCH_HOLE support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Cc: Karel Zak <kzak@xxxxxxxxxx>
Cc: Eric Sandeen <sandeen@xxxxxxxxxx>
Signed-off-by: Cong Wang <xiyou.wangcong@xxxxxxxxx>

---
diff --git a/sys-utils/fallocate.1 b/sys-utils/fallocate.1
index 003cb55..f13ea86 100644
--- a/sys-utils/fallocate.1
+++ b/sys-utils/fallocate.1
@@ -5,6 +5,7 @@ fallocate \- preallocate space to a file.
 .SH SYNOPSIS
 .B fallocate
 .RB [ \-n ]
+.RB [ \-p ]
 .RB [ \-o
 .IR offset ]
 .B \-l
@@ -33,6 +34,8 @@ Print help and exit.
 .IP "\fB\-n, \-\-keep-size\fP"
 Do not modify the apparent length of the file. This may effectively allocate
 blocks past EOF, which can be removed with a truncate.
+.IP "\fB\-p, \-\-punch-hole\fP"
+Punch holes in the file, the range should not exceed the length of the file.
 .IP "\fB\-o, \-\-offset\fP \fIoffset\fP
 Specifies the beginning offset of the allocation, in bytes.
 .IP "\fB\-l, \-\-length\fP \fIlength\fP
@@ -41,6 +44,7 @@ Specifies the length of the allocation, in bytes.
 .nf
 Eric Sandeen <sandeen@xxxxxxxxxx>
 Karel Zak <kzak@xxxxxxxxxx>
+Cong Wang <xiyou.wangcong@xxxxxxxxx>
 .fi
 .SH SEE ALSO
 .BR fallocate (2),
diff --git a/sys-utils/fallocate.c b/sys-utils/fallocate.c
index 13d7277..b58485a 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;
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux