btrfs: use ASSERT to report logical error in cow_file_range()
authorAnand Jain <anand.jain@oracle.com>
Thu, 15 Feb 2018 10:07:59 +0000 (18:07 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 26 Mar 2018 13:09:35 +0000 (15:09 +0200)
Use ASSERT to report logical error in cow_file_range(), also move it a
bit closer to when the num_bytes is derived.

The extent start could be (u64)-1 in some cases, the assert should catch
that we do not accidentally pass it to cow_file_range.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index e90d7c5..28491a8 100644 (file)
@@ -978,6 +978,7 @@ static noinline int cow_file_range(struct inode *inode,
 
        num_bytes = ALIGN(end - start + 1, blocksize);
        num_bytes = max(blocksize,  num_bytes);
+       ASSERT(num_bytes <= btrfs_super_total_bytes(fs_info->super_copy));
 
        inode_should_defrag(BTRFS_I(inode), start, end, num_bytes, SZ_64K);
 
@@ -1008,8 +1009,6 @@ static noinline int cow_file_range(struct inode *inode,
                }
        }
 
-       BUG_ON(num_bytes > btrfs_super_total_bytes(fs_info->super_copy));
-
        alloc_hint = get_extent_allocation_hint(inode, start, num_bytes);
        btrfs_drop_extent_cache(BTRFS_I(inode), start,
                        start + num_bytes - 1, 0);