aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/ioctl.c')
-rw-r--r--fs/btrfs/ioctl.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 89d5db7eb452..f2e8fcc279a3 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3562,6 +3562,11 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
3562 up_read(&info->groups_sem); 3562 up_read(&info->groups_sem);
3563 } 3563 }
3564 3564
3565 /*
3566 * Global block reserve, exported as a space_info
3567 */
3568 slot_count++;
3569
3565 /* space_slots == 0 means they are asking for a count */ 3570 /* space_slots == 0 means they are asking for a count */
3566 if (space_args.space_slots == 0) { 3571 if (space_args.space_slots == 0) {
3567 space_args.total_spaces = slot_count; 3572 space_args.total_spaces = slot_count;
@@ -3620,6 +3625,21 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
3620 up_read(&info->groups_sem); 3625 up_read(&info->groups_sem);
3621 } 3626 }
3622 3627
3628 /*
3629 * Add global block reserve
3630 */
3631 if (slot_count) {
3632 struct btrfs_block_rsv *block_rsv = &root->fs_info->global_block_rsv;
3633
3634 spin_lock(&block_rsv->lock);
3635 space.total_bytes = block_rsv->size;
3636 space.used_bytes = block_rsv->size - block_rsv->reserved;
3637 spin_unlock(&block_rsv->lock);
3638 space.flags = BTRFS_SPACE_INFO_GLOBAL_RSV;
3639 memcpy(dest, &space, sizeof(space));
3640 space_args.total_spaces++;
3641 }
3642
3623 user_dest = (struct btrfs_ioctl_space_info __user *) 3643 user_dest = (struct btrfs_ioctl_space_info __user *)
3624 (arg + sizeof(struct btrfs_ioctl_space_args)); 3644 (arg + sizeof(struct btrfs_ioctl_space_args));
3625 3645