btrfs-progs: fix defrag threshold overflow
authorPatrik Lundquist <patrik.lundquist@gmail.com>
Wed, 24 Jun 2015 14:21:06 +0000 (16:21 +0200)
committerDavid Sterba <dsterba@suse.cz>
Thu, 25 Jun 2015 17:32:28 +0000 (19:32 +0200)
btrfs fi defrag -t 1T overflows the u32 thresh variable and default,
instead of max, threshold is used.

Signed-off-by: Patrik Lundquist <patrik.lundquist@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
cmds-filesystem.c

index 530f815..72bb45b 100644 (file)
@@ -1127,7 +1127,7 @@ static int cmd_defrag(int argc, char **argv)
        int flush = 0;
        u64 start = 0;
        u64 len = (u64)-1;
-       u32 thresh = 0;
+       u64 thresh = 0;
        int i;
        int recursive = 0;
        int ret = 0;
@@ -1186,7 +1186,7 @@ static int cmd_defrag(int argc, char **argv)
        memset(&defrag_global_range, 0, sizeof(range));
        defrag_global_range.start = start;
        defrag_global_range.len = len;
-       defrag_global_range.extent_thresh = thresh;
+       defrag_global_range.extent_thresh = thresh > (u32)-1 ? (u32)-1 : (u32)thresh;
        if (compress_type) {
                defrag_global_range.flags |= BTRFS_DEFRAG_RANGE_COMPRESS;
                defrag_global_range.compress_type = compress_type;