|
@@ -3562,6 +3562,11 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
|
|
|
up_read(&info->groups_sem);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Global block reserve, exported as a space_info
|
|
|
+ */
|
|
|
+ slot_count++;
|
|
|
+
|
|
|
/* space_slots == 0 means they are asking for a count */
|
|
|
if (space_args.space_slots == 0) {
|
|
|
space_args.total_spaces = slot_count;
|
|
@@ -3620,6 +3625,21 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
|
|
|
up_read(&info->groups_sem);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Add global block reserve
|
|
|
+ */
|
|
|
+ if (slot_count) {
|
|
|
+ struct btrfs_block_rsv *block_rsv = &root->fs_info->global_block_rsv;
|
|
|
+
|
|
|
+ spin_lock(&block_rsv->lock);
|
|
|
+ space.total_bytes = block_rsv->size;
|
|
|
+ space.used_bytes = block_rsv->size - block_rsv->reserved;
|
|
|
+ spin_unlock(&block_rsv->lock);
|
|
|
+ space.flags = BTRFS_SPACE_INFO_GLOBAL_RSV;
|
|
|
+ memcpy(dest, &space, sizeof(space));
|
|
|
+ space_args.total_spaces++;
|
|
|
+ }
|
|
|
+
|
|
|
user_dest = (struct btrfs_ioctl_space_info __user *)
|
|
|
(arg + sizeof(struct btrfs_ioctl_space_args));
|
|
|
|