done
-for ac_header in termios.h sys/statvfs.h sys/timerfd.h
+for ac_header in termios.h sys/statvfs.h sys/timerfd.h linux/magic.h linux/fiemap.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
sys/time.h sys/types.h sys/utsname.h sys/wait.h time.h \
unistd.h], , [AC_MSG_ERROR(bailing out)])
-AC_CHECK_HEADERS(termios.h sys/statvfs.h sys/timerfd.h)
+AC_CHECK_HEADERS(termios.h sys/statvfs.h sys/timerfd.h linux/magic.h linux/fiemap.h)
case "$host_os" in
linux*)
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
+/* Define to 1 if you have the <linux/fiemap.h> header file. */
+#undef HAVE_LINUX_FIEMAP_H
+
/* Define to 1 if you have the <linux/fs.h> header file. */
#undef HAVE_LINUX_FS_H
+/* Define to 1 if you have the <linux/magic.h> header file. */
+#undef HAVE_LINUX_MAGIC_H
+
/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
#include <sys/ioctl.h>
#include <sys/vfs.h> /* fstatfs */
-#include <linux/fs.h> /* FS_IOC_FIEMAP */
-#include <linux/fiemap.h> /* fiemap */
-#include <linux/magic.h> /* BTRFS_SUPER_MAGIC */
+
+#ifdef __linux__
+ #include <linux/fs.h> /* FS_IOC_FIEMAP */
+#endif
+
+#ifdef HAVE_LINUX_FIEMAP_H
+ #include <linux/fiemap.h> /* fiemap */
+#endif
+
+#ifdef HAVE_LINUX_MAGIC_H
+ #include <linux/magic.h> /* BTRFS_SUPER_MAGIC */
+#endif
#define DM_STATS_REGION_NOT_PRESENT UINT64_MAX
#define DM_STATS_GROUP_NOT_PRESENT DM_STATS_GROUP_NONE
return 1;
}
+#ifdef HAVE_LINUX_FIEMAP_H
/*
* Group a table of region_ids corresponding to the extents of a file.
*/
struct statfs fsbuf;
struct stat buf;
+#ifdef BTRFS_SUPER_MAGIC
if (fstatfs(fd, &fsbuf)) {
log_error("fstatfs failed for fd %d", fd);
return 0;
"physical FIEMAP extent data.");
return 0;
}
+#endif
if (fstat(fd, &buf)) {
log_error("fstat failed for fd %d", fd);
return NULL;
}
+#else /* HAVE_LINUX_FIEMAP */
+uint64_t *dm_stats_create_regions_from_fd(struct dm_stats *dms, int fd,
+ int group, int precise,
+ struct dm_histogram *bounds,
+ const char *alias)
+{
+ log_error("File mapping requires FIEMAP ioctl support.");
+ return 0;
+}
+#endif /* HAVE_LINUX_FIEMAP */
+
/*
* Backward compatible dm_stats_create_region() implementations.
*