|
@@ -2208,7 +2208,7 @@ long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
|
|
|
int num_types = 4;
|
|
|
int alloc_size;
|
|
|
int ret = 0;
|
|
|
- int slot_count = 0;
|
|
|
+ u64 slot_count = 0;
|
|
|
int i, c;
|
|
|
|
|
|
if (copy_from_user(&space_args,
|
|
@@ -2247,7 +2247,7 @@ long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- slot_count = min_t(int, space_args.space_slots, slot_count);
|
|
|
+ slot_count = min_t(u64, space_args.space_slots, slot_count);
|
|
|
|
|
|
alloc_size = sizeof(*dest) * slot_count;
|
|
|
|
|
@@ -2267,6 +2267,9 @@ long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
|
|
|
for (i = 0; i < num_types; i++) {
|
|
|
struct btrfs_space_info *tmp;
|
|
|
|
|
|
+ if (!slot_count)
|
|
|
+ break;
|
|
|
+
|
|
|
info = NULL;
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(tmp, &root->fs_info->space_info,
|
|
@@ -2288,7 +2291,10 @@ long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
|
|
|
memcpy(dest, &space, sizeof(space));
|
|
|
dest++;
|
|
|
space_args.total_spaces++;
|
|
|
+ slot_count--;
|
|
|
}
|
|
|
+ if (!slot_count)
|
|
|
+ break;
|
|
|
}
|
|
|
up_read(&info->groups_sem);
|
|
|
}
|