Hi,
too late, already pulled
On Wed, Aug 03, 2011 at 06:15:25PM +0800, Liu Bo wrote:
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -6682,6 +6682,10 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
> struct btrfs_space_info *space_info;
> struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices;
> struct btrfs_device *device;
> + u64 min_free;
^^^
> + int index;
> + int dev_nr = 0;
> + int dev_min = 1;
> int full = 0;
> int ret = 0;
>
> @@ -6728,9 +6733,29 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
> if (full)
> goto out;
>
> + /*
> + * index:
> + * 0: raid10
> + * 1: raid1
> + * 2: dup
> + * 3: raid0
> + * 4: single
> + */
> + index = get_block_group_index(block_group);
> + if (index == 0) {
> + dev_min = 4;
> + min_free /= 2;
> + } else if (index == 1) {
> + dev_min = 2;
> + } else if (index == 2) {
> + min_free *= 2;
> + } else if (index == 3) {
> + dev_min = fs_devices->rw_devices;
> + min_free /= dev_min;
^^^^^^^^^^^^^^^^^^^
64bit division will break 32bit builds, can you please convert it to
do_div ? the other is 'div-by-power-of-2' which will most probably be
converted to shifts.
david
> + }
> +
> mutex_lock(&root->fs_info->chunk_mutex);
> list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) {
> - u64 min_free = btrfs_block_group_used(&block_group->item);
> u64 dev_offset;
>
> /*
> @@ -6741,7 +6766,11 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
> ret = find_free_dev_extent(NULL, device, min_free,
> &dev_offset, NULL);
> if (!ret)
> + dev_nr++;
> +
> + if (dev_nr >= dev_min)
> break;
> +
> ret = -1;
> }
> }
> --
> 1.6.5.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html