summaryrefslogtreecommitdiff
path: root/cmds-fi-du.c
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2016-10-14 18:39:40 +0200
committerDavid Sterba <dsterba@suse.com>2016-10-25 14:28:36 +0200
commitcf8fd1a70884db0b31e312d0780611f262bb9b45 (patch)
tree88717f4d22793aa3fa04876244c08d0234c29dbc /cmds-fi-du.c
parent508000138c53707c961ce7364aff798e594604b7 (diff)
btrfs-progs: build: detect fiemap shared flag but don't fail build
The FIEMAP_EXTENT_SHARED fiemap flag was introduced in 2.6.33. If the headers do not provide the definition, the build will fail. The support of the fiemap sharing depends on the running kernel. There are still systems with 2.6.32 kernel headers but running newer versions. To support such environment, don't fail build, provide own defintion of the structure and detect if there's an old kernel in use in the relevant command (btrfs fi du). Reported-by: Abhay Sachan <lkp.abhay@gmail.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-fi-du.c')
-rw-r--r--cmds-fi-du.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/cmds-fi-du.c b/cmds-fi-du.c
index a5b66e6f..895c242e 100644
--- a/cmds-fi-du.c
+++ b/cmds-fi-du.c
@@ -27,8 +27,13 @@
#include <sys/ioctl.h>
#include <linux/fs.h>
+#include <linux/version.h>
#include <linux/fiemap.h>
+#if !defined(FIEMAP_EXTENT_SHARED) && (HAVE_OWN_FIEMAP_EXTENT_SHARED_DEFINE == 1)
+#define FIEMAP_EXTENT_SHARED 0x00002000
+#endif
+
#include "utils.h"
#include "commands.h"
#include "kerncompat.h"
@@ -546,6 +551,7 @@ int cmd_filesystem_du(int argc, char **argv)
{
int ret = 0, err = 0;
int i;
+ u32 kernel_version;
unit_mode = get_unit_mode_from_arg(&argc, argv, 1);
@@ -570,6 +576,14 @@ int cmd_filesystem_du(int argc, char **argv)
if (check_argc_min(argc - optind, 1))
usage(cmd_filesystem_du_usage);
+ kernel_version = get_running_kernel_version();
+
+ if (kernel_version < KERNEL_VERSION(2,6,33)) {
+ warning(
+"old kernel version detected, shared space will be reported as exclusive\n"
+"due to missing support for FIEMAP_EXTENT_SHARED flag");
+ }
+
printf("%10s %10s %10s %s\n", "Total", "Exclusive", "Set shared",
"Filename");