This patch provide a method to user to create a qgroup in a specified type.
It use a byte of the ->create in btrfs_ioctl_qgroup_create_args to pass the type of qgroup to kernel. Then there is a macro named as BTRFS_QGROUP_TYPE_SHIFT to help kernel get the type of qgroup user want to creat. Signed-off-by: Dongsheng Yang <[email protected]> --- fs/btrfs/ioctl.c | 12 ++++++++++-- fs/btrfs/qgroup.h | 6 ++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index a50f295..b1f46e8 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -4675,8 +4675,16 @@ static long btrfs_ioctl_qgroup_create(struct file *file, void __user *arg) /* FIXME: check if the IDs really exist */ if (sa->create) { - ret = btrfs_create_qgroup(trans, root->fs_info, sa->qgroupid, - BTRFS_QGROUP_TYPE_DEFAULT); + u8 type = (sa->create >> BTRFS_QGROUP_TYPE_SHIFT); + if (type) { + if (!btrfs_fs_incompat(root->fs_info, QGROUP_TYPE)) { + ret = -EINVAL; + goto out; + } + } else { + type = BTRFS_QGROUP_TYPE_DEFAULT; + } + ret = btrfs_create_qgroup(trans, root->fs_info, sa->qgroupid, type); } else { ret = btrfs_remove_qgroup(trans, root->fs_info, sa->qgroupid); } diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h index 75d0bb6..0be0548 100644 --- a/fs/btrfs/qgroup.h +++ b/fs/btrfs/qgroup.h @@ -30,6 +30,12 @@ #define BTRFS_QGROUP_TYPE_DEFAULT BTRFS_QGROUP_TYPE_MIXED /* + * We are using the first byte in ->create of btrfs_ioctl_qgroup_create_args + * to specify the type of the qgroup to be created. + */ +#define BTRFS_QGROUP_TYPE_SHIFT 56 + +/* * A description of the operations, all of these operations only happen when we * are adding the 1st reference for that subvolume in the case of adding space * or on the last reference delete in the case of subtraction. The only -- 1.8.4.2 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
