From: Fan Chengniang <fancn.fnst@xxxxxxxxxxxxxx>
add a function to obtain quota status. Now it can only get
whether quota is enabled. We can extend the function to get
more quota status
Signed-off-by: Fan Chengniang <fancn.fnst@xxxxxxxxxxxxxx>
---
fs/btrfs/ioctl.c | 6 ++++++
fs/btrfs/qgroup.c | 14 ++++++++++++++
fs/btrfs/qgroup.h | 3 +++
include/uapi/linux/btrfs.h | 3 +++
4 files changed, 26 insertions(+)
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 658d83d..f6e730b 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -4572,6 +4572,12 @@ static long btrfs_ioctl_quota_ctl(struct file *file, void __user *arg)
case BTRFS_QUOTA_CTL_DISABLE:
ret = btrfs_quota_disable(trans, root->fs_info);
break;
+ case BTRFS_QUOTA_CTL_STATUS:
+ ret = btrfs_quota_status(trans, root->fs_info, sa);
+ if (!ret)
+ if (copy_to_user(arg, sa, sizeof(*sa)))
+ ret = -EFAULT;
+ break;
default:
ret = -EINVAL;
break;
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
index 24c5bb1..b57fe45 100644
--- a/fs/btrfs/qgroup.c
+++ b/fs/btrfs/qgroup.c
@@ -993,6 +993,20 @@ out:
return ret;
}
+int btrfs_quota_status(struct btrfs_trans_handle *trans,
+ struct btrfs_fs_info *fs_info,
+ struct btrfs_ioctl_quota_ctl_args *sa)
+{
+ int ret = 0;
+
+ if (fs_info->quota_enabled)
+ sa->status |= BTRFS_QUOTA_STATUS_QUOTA_ENABLED;
+ else
+ sa->status &= ~BTRFS_QUOTA_STATUS_QUOTA_ENABLED;
+
+ return ret;
+}
+
static void qgroup_dirty(struct btrfs_fs_info *fs_info,
struct btrfs_qgroup *qgroup)
{
diff --git a/fs/btrfs/qgroup.h b/fs/btrfs/qgroup.h
index c5242aa..52d8b19 100644
--- a/fs/btrfs/qgroup.h
+++ b/fs/btrfs/qgroup.h
@@ -62,6 +62,9 @@ int btrfs_quota_enable(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info);
int btrfs_quota_disable(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info);
+int btrfs_quota_status(struct btrfs_trans_handle *trans,
+ struct btrfs_fs_info *fs_info,
+ struct btrfs_ioctl_quota_ctl_args *sa);
int btrfs_qgroup_rescan(struct btrfs_fs_info *fs_info);
void btrfs_qgroup_rescan_resume(struct btrfs_fs_info *fs_info);
int btrfs_qgroup_wait_for_completion(struct btrfs_fs_info *fs_info);
diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h
index 611e1c5..d4014e6 100644
--- a/include/uapi/linux/btrfs.h
+++ b/include/uapi/linux/btrfs.h
@@ -423,6 +423,9 @@ struct btrfs_ioctl_get_dev_stats {
#define BTRFS_QUOTA_CTL_ENABLE 1
#define BTRFS_QUOTA_CTL_DISABLE 2
#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3
+#define BTRFS_QUOTA_CTL_STATUS 4
+
+#define BTRFS_QUOTA_STATUS_QUOTA_ENABLED 1
struct btrfs_ioctl_quota_ctl_args {
__u64 cmd;
__u64 status;
--
1.8.4.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