From 9a5808cfb7e49bf640a10767d13e16579e8cda30 Mon Sep 17 00:00:00 2001 From: Changman Lee Date: Tue, 4 Nov 2014 18:10:54 +0900 Subject: [PATCH] mkfs.f2fs: reclaim free space in case of regular file If we use regular file instead block device, let's reclaim its free space. Signed-off-by: Changman Lee Signed-off-by: Jaegeuk Kim --- configure.ac | 2 +- mkfs/f2fs_format_utils.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 0111e72..d66cb73 100644 --- a/configure.ac +++ b/configure.ac @@ -57,7 +57,7 @@ PKG_CHECK_MODULES([libuuid], [uuid]) # Checks for header files. AC_CHECK_HEADERS([linux/fs.h fcntl.h mntent.h stdlib.h string.h \ - sys/ioctl.h sys/mount.h unistd.h]) + sys/ioctl.h sys/mount.h unistd.h linux/falloc.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE diff --git a/mkfs/f2fs_format_utils.c b/mkfs/f2fs_format_utils.c index 9892a8f..88b9953 100644 --- a/mkfs/f2fs_format_utils.c +++ b/mkfs/f2fs_format_utils.c @@ -6,18 +6,26 @@ * * Dual licensed under the GPL or LGPL version 2 licenses. */ +#define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include #include #include #include +#include #include "f2fs_fs.h" #ifdef HAVE_LINUX_FS_H #include #endif +#ifdef HAVE_LINUX_FALLOC_H +#include +#endif int f2fs_trim_device() { @@ -37,9 +45,15 @@ int f2fs_trim_device() #if defined(WITH_BLKDISCARD) && defined(BLKDISCARD) MSG(0, "Info: Discarding device\n"); - if (S_ISREG(stat_buf.st_mode)) + if (S_ISREG(stat_buf.st_mode)) { +#ifdef FALLOC_FL_PUNCH_HOLE + if (fallocate(config.fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, + range[0], range[1]) < 0) { + MSG(0, "Info: fallocate(PUNCH_HOLE|KEEP_SIZE) is failed\n"); + } +#endif return 0; - else if (S_ISBLK(stat_buf.st_mode)) { + } else if (S_ISBLK(stat_buf.st_mode)) { if (ioctl(config.fd, BLKDISCARD, &range) < 0) { MSG(0, "Info: This device doesn't support TRIM\n"); } else { -- 2.7.4