# 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
*
* Dual licensed under the GPL or LGPL version 2 licenses.
*/
+#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
#include <stdio.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
+#include <fcntl.h>
#include "f2fs_fs.h"
#ifdef HAVE_LINUX_FS_H
#include <linux/fs.h>
#endif
+#ifdef HAVE_LINUX_FALLOC_H
+#include <linux/falloc.h>
+#endif
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 {