diff --git a/xfsprogs-3.0.1-fallocate.patch b/xfsprogs-3.0.1-fallocate.patch new file mode 100644 index 0000000..19d26b6 --- /dev/null +++ b/xfsprogs-3.0.1-fallocate.patch @@ -0,0 +1,188 @@ +From: Eric Sandeen +Date: Mon, 18 May 2009 16:11:44 +0000 (-0500) +Subject: xfs_io: add fallocate command +X-Git-Url: http://git.kernel.org/?p=fs%2Fxfs%2Fxfsprogs-dev.git;a=commitdiff_plain;h=c0b5232a5eded15dc55abdad184811a21eab62b7 + +xfs_io: add fallocate command + +Based on Dave's earlier patch, but now we have an fallocate +glibc call... this also adds autoconf magic and a manpage +update. + +(hopefully not too #ifdef-heavy....) + +Signed-off-by: Eric Sandeen +Reviewed-by: Christoph Hellwig +--- + +diff --git a/configure.in b/configure.in +index 3fbd44e..8f5782a 100644 +--- a/configure.in ++++ b/configure.in +@@ -66,6 +66,7 @@ AC_HAVE_MINCORE + AC_HAVE_SENDFILE + AC_HAVE_GETMNTENT + AC_HAVE_GETMNTINFO ++AC_HAVE_FALLOCATE + + AC_TYPE_PSINT + AC_TYPE_PSUNSIGNED +diff --git a/include/builddefs.in b/include/builddefs.in +index c8f5c08..d6bf5c0 100644 +--- a/include/builddefs.in ++++ b/include/builddefs.in +@@ -94,6 +94,7 @@ HAVE_MINCORE = @have_mincore@ + HAVE_SENDFILE = @have_sendfile@ + HAVE_GETMNTENT = @have_getmntent@ + HAVE_GETMNTINFO = @have_getmntinfo@ ++HAVE_FALLOCATE = @have_fallocate@ + + GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall + # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl +diff --git a/io/Makefile b/io/Makefile +index 6f10e8d..1a51879 100644 +--- a/io/Makefile ++++ b/io/Makefile +@@ -59,6 +59,10 @@ ifeq ($(ENABLE_EDITLINE),yes) + LLDLIBS += $(LIBEDITLINE) $(LIBTERMCAP) + endif + ++ifeq ($(HAVE_FALLOCATE),yes) ++LCFLAGS += -DHAVE_FALLOCATE ++endif ++ + default: $(LTCOMMAND) + + include $(BUILDRULES) +diff --git a/io/prealloc.c b/io/prealloc.c +index 6a2563e..7d9bd2f 100644 +--- a/io/prealloc.c ++++ b/io/prealloc.c +@@ -16,6 +16,9 @@ + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#if defined(HAVE_FALLOCATE) ++#include ++#endif + #include + #include + #include +@@ -26,6 +29,9 @@ static cmdinfo_t allocsp_cmd; + static cmdinfo_t freesp_cmd; + static cmdinfo_t resvsp_cmd; + static cmdinfo_t unresvsp_cmd; ++#if defined(HAVE_FALLOCATE) ++static cmdinfo_t falloc_cmd; ++#endif + + static int + offset_length( +@@ -119,6 +125,40 @@ unresvsp_f( + return 0; + } + ++#if defined (HAVE_FALLOCATE) ++static int ++fallocate_f( ++ int argc, ++ char **argv) ++{ ++ xfs_flock64_t segment; ++ int mode = 0; ++ int c; ++ ++ while ((c = getopt(argc, argv, "k")) != EOF) { ++ switch (c) { ++ case 'k': ++ mode = FALLOC_FL_KEEP_SIZE; ++ break; ++ default: ++ command_usage(&falloc_cmd); ++ } ++ } ++ if (optind != argc - 2) ++ return command_usage(&falloc_cmd); ++ ++ if (!offset_length(argv[optind], argv[optind+1], &segment)) ++ return 0; ++ ++ if (fallocate(file->fd, mode, ++ segment.l_start, segment.l_len)) { ++ perror("fallocate"); ++ return 0; ++ } ++ return 0; ++} ++#endif ++ + void + prealloc_init(void) + { +@@ -160,4 +200,17 @@ prealloc_init(void) + add_command(&freesp_cmd); + add_command(&resvsp_cmd); + add_command(&unresvsp_cmd); ++ ++#if defined (HAVE_FALLOCATE) ++ falloc_cmd.name = _("falloc"); ++ falloc_cmd.cfunc = fallocate_f; ++ falloc_cmd.argmin = 2; ++ falloc_cmd.argmax = -1; ++ falloc_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK; ++ falloc_cmd.args = _("[-k] off len"); ++ falloc_cmd.oneline = ++ _("allocates space associated with part of a file via fallocate"); ++ ++ add_command(&falloc_cmd); ++#endif + } +diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4 +index 5156ced..1ac4666 100644 +--- a/m4/package_libcdev.m4 ++++ b/m4/package_libcdev.m4 +@@ -98,3 +98,18 @@ AC_DEFUN([AC_HAVE_GETMNTINFO], + AC_MSG_RESULT(no)) + AC_SUBST(have_getmntinfo) + ]) ++ ++# ++# Check if we have a fallocate libc call (Linux) ++# ++AC_DEFUN([AC_HAVE_FALLOCATE], ++ [ AC_MSG_CHECKING([for fallocate]) ++ AC_TRY_LINK([ ++#include ++ ], [ ++ fallocate(0, 0, 0, 0); ++ ], have_fallocate=yes ++ AC_MSG_RESULT(yes), ++ AC_MSG_RESULT(no)) ++ AC_SUBST(have_fallocate) ++ ]) +diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8 +index 23bef94..6fc6bad 100644 +--- a/man/man8/xfs_io.8 ++++ b/man/man8/xfs_io.8 +@@ -295,6 +295,20 @@ system call described in the + .BR xfsctl (3) + manual page. + .TP ++.BI "falloc [ \-k ]" " offset length" ++Allocates reserved, unwritten space for part of a file using the ++fallocate routine as described in the ++.BR fallocate (3) ++manual page. ++.RS 1.0i ++.PD 0 ++.TP 0.4i ++.B \-k ++will set the FALLOC_FL_KEEP_SIZE flag as described in ++.BR fallocate (3). ++.PD ++.RE ++.TP + .BI truncate " offset" + Truncates the current file at the given offset using + .BR ftruncate (2). + diff --git a/xfsprogs.spec b/xfsprogs.spec index 4f0e618..a46147f 100644 --- a/xfsprogs.spec +++ b/xfsprogs.spec @@ -1,7 +1,7 @@ Summary: Utilities for managing the XFS filesystem Name: xfsprogs Version: 3.0.1 -Release: 3%{?dist} +Release: 4%{?dist} # Licensing based on generic "GNU GENERAL PUBLIC LICENSE" # in source, with no mention of version. # doc/COPYING file specifies what is GPL and what is LGPL @@ -18,6 +18,7 @@ Obsoletes: xfs-cmds <= %{version} Conflicts: xfsdump < 3.0.1 Patch0: xfsprogs-3.0.1-readline.patch +Patch1: xfsprogs-3.0.1-fallocate.patch %description A set of commands to use the XFS filesystem, including mkfs.xfs. @@ -63,6 +64,7 @@ in building or running the xfstests QA suite. %setup -q %patch0 -p1 +%patch1 -p1 %build export tagname=CC DEBUG=-DNDEBUG @@ -189,6 +191,9 @@ rm -rf $RPM_BUILD_ROOT %{_includedir}/xfs/xfs_types.h %changelog +* Mon Jun 15 2009 Eric Sandeen 3.0.1-4 +- Add fallocate command to xfs_io + * Fri May 15 2009 Eric Sandeen 3.0.1-3 - Fix and re-enable readline