diff options
-rw-r--r-- | Documentation/btrfs-filesystem.asciidoc | 2 | ||||
-rw-r--r-- | cmds-filesystem.c | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/Documentation/btrfs-filesystem.asciidoc b/Documentation/btrfs-filesystem.asciidoc index 9782af9b..0f7ea495 100644 --- a/Documentation/btrfs-filesystem.asciidoc +++ b/Documentation/btrfs-filesystem.asciidoc @@ -80,7 +80,7 @@ show sizes in TiB, or TB with --si If conflicting options are passed, the last one takes precedence. *defragment* [options] <file>|<dir> [<file>|<dir>...]:: -Defragment file data on a mounted filesystem. +Defragment file data on a mounted filesystem. Requires kernel 2.6.33 and newer. + If '-r' is passed, files in dir will be defragmented recursively. The start position and the number of bytes to defragment can be specified by diff --git a/cmds-filesystem.c b/cmds-filesystem.c index c66709b3..56a19a93 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -1042,14 +1042,15 @@ static int cmd_filesystem_defrag(int argc, char **argv) /* * Kernel has a different default (256K) that is supposed to be safe, * but it does not defragment very well. The 32M will likely lead to - * better results and is independent of the kernel default. + * better results and is independent of the kernel default. We have to + * use the v2 defrag ioctl. */ thresh = 32 * 1024 * 1024; + defrag_global_fancy_ioctl = 1; defrag_global_errors = 0; defrag_global_verbose = 0; defrag_global_errors = 0; - defrag_global_fancy_ioctl = 0; while(1) { int c = getopt(argc, argv, "vrc::fs:l:t:"); if (c < 0) |