All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: linux-fsdevel@vger.kernel.org
Cc: xfs@oss.sgi.com, cluster-devel@redhat.com,
	ocfs2-devel@oss.oracle.com, Jan Kara <jack@suse.cz>
Subject: [PATCH 01/17] quota: Split ->set_xstate callback into two
Date: Fri, 16 Jan 2015 13:47:35 +0100	[thread overview]
Message-ID: <1421412471-4747-2-git-send-email-jack@suse.cz> (raw)
In-Reply-To: <1421412471-4747-1-git-send-email-jack@suse.cz>

Split ->set_xstate callback into two callbacks - one for turning quotas
on (->quota_enable) and one for turning quotas off (->quota_disable). That
way we don't have to pass quotactl command into the callback which seems
cleaner.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/quota/quota.c      | 20 ++++++++++++++----
 fs/xfs/xfs_quotaops.c | 58 ++++++++++++++++++++++++++++++++-------------------
 include/linux/quota.h |  3 ++-
 3 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 2aa4151f99d2..5b307e2b5719 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -198,15 +198,26 @@ static int quota_setquota(struct super_block *sb, int type, qid_t id,
 	return sb->s_qcop->set_dqblk(sb, qid, &fdq);
 }
 
-static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr)
+static int quota_enable(struct super_block *sb, void __user *addr)
 {
 	__u32 flags;
 
 	if (copy_from_user(&flags, addr, sizeof(flags)))
 		return -EFAULT;
-	if (!sb->s_qcop->set_xstate)
+	if (!sb->s_qcop->quota_enable)
 		return -ENOSYS;
-	return sb->s_qcop->set_xstate(sb, flags, cmd);
+	return sb->s_qcop->quota_enable(sb, flags);
+}
+
+static int quota_disable(struct super_block *sb, void __user *addr)
+{
+	__u32 flags;
+
+	if (copy_from_user(&flags, addr, sizeof(flags)))
+		return -EFAULT;
+	if (!sb->s_qcop->quota_disable)
+		return -ENOSYS;
+	return sb->s_qcop->quota_disable(sb, flags);
 }
 
 static int quota_getxstate(struct super_block *sb, void __user *addr)
@@ -335,8 +346,9 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 			return -ENOSYS;
 		return sb->s_qcop->quota_sync(sb, type);
 	case Q_XQUOTAON:
+		return quota_enable(sb, addr);
 	case Q_XQUOTAOFF:
-		return quota_setxstate(sb, cmd, addr);
+		return quota_disable(sb, addr);
 	case Q_XQUOTARM:
 		return quota_rmxquota(sb, addr);
 	case Q_XGETQSTAT:
diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c
index 8fcd20dbf89a..a46bb8094307 100644
--- a/fs/xfs/xfs_quotaops.c
+++ b/fs/xfs/xfs_quotaops.c
@@ -64,19 +64,9 @@ xfs_fs_get_xstatev(
 	return xfs_qm_scall_getqstatv(mp, fqs);
 }
 
-STATIC int
-xfs_fs_set_xstate(
-	struct super_block	*sb,
-	unsigned int		uflags,
-	int			op)
+static unsigned int xfs_quota_flags(unsigned int uflags)
 {
-	struct xfs_mount	*mp = XFS_M(sb);
-	unsigned int		flags = 0;
-
-	if (sb->s_flags & MS_RDONLY)
-		return -EROFS;
-	if (!XFS_IS_QUOTA_RUNNING(mp))
-		return -ENOSYS;
+	unsigned int flags = 0;
 
 	if (uflags & FS_QUOTA_UDQ_ACCT)
 		flags |= XFS_UQUOTA_ACCT;
@@ -91,16 +81,39 @@ xfs_fs_set_xstate(
 	if (uflags & FS_QUOTA_PDQ_ENFD)
 		flags |= XFS_PQUOTA_ENFD;
 
-	switch (op) {
-	case Q_XQUOTAON:
-		return xfs_qm_scall_quotaon(mp, flags);
-	case Q_XQUOTAOFF:
-		if (!XFS_IS_QUOTA_ON(mp))
-			return -EINVAL;
-		return xfs_qm_scall_quotaoff(mp, flags);
-	}
+	return flags;
+}
+
+STATIC int
+xfs_quota_enable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+
+	return xfs_qm_scall_quotaon(mp, xfs_quota_flags(uflags));
+}
+
+STATIC int
+xfs_quota_disable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+	if (!XFS_IS_QUOTA_ON(mp))
+		return -EINVAL;
 
-	return -EINVAL;
+	return xfs_qm_scall_quotaoff(mp, xfs_quota_flags(uflags));
 }
 
 STATIC int
@@ -166,7 +179,8 @@ xfs_fs_set_dqblk(
 const struct quotactl_ops xfs_quotactl_operations = {
 	.get_xstatev		= xfs_fs_get_xstatev,
 	.get_xstate		= xfs_fs_get_xstate,
-	.set_xstate		= xfs_fs_set_xstate,
+	.quota_enable		= xfs_quota_enable,
+	.quota_disable		= xfs_quota_disable,
 	.rm_xquota		= xfs_fs_rm_xquota,
 	.get_dqblk		= xfs_fs_get_dqblk,
 	.set_dqblk		= xfs_fs_set_dqblk,
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 0c42113607ce..79e8b03f75fb 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -328,13 +328,14 @@ struct quotactl_ops {
 	int (*quota_on)(struct super_block *, int, int, struct path *);
 	int (*quota_on_meta)(struct super_block *, int, int);
 	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
 	int (*quota_sync)(struct super_block *, int);
 	int (*get_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*set_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*get_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*set_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
-	int (*set_xstate)(struct super_block *, unsigned int, int);
 	int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
-- 
2.1.2


WARNING: multiple messages have this Message-ID (diff)
From: Jan Kara <jack@suse.cz>
To: linux-fsdevel@vger.kernel.org
Cc: cluster-devel@redhat.com, Jan Kara <jack@suse.cz>,
	ocfs2-devel@oss.oracle.com, xfs@oss.sgi.com
Subject: [PATCH 01/17] quota: Split ->set_xstate callback into two
Date: Fri, 16 Jan 2015 13:47:35 +0100	[thread overview]
Message-ID: <1421412471-4747-2-git-send-email-jack@suse.cz> (raw)
In-Reply-To: <1421412471-4747-1-git-send-email-jack@suse.cz>

Split ->set_xstate callback into two callbacks - one for turning quotas
on (->quota_enable) and one for turning quotas off (->quota_disable). That
way we don't have to pass quotactl command into the callback which seems
cleaner.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/quota/quota.c      | 20 ++++++++++++++----
 fs/xfs/xfs_quotaops.c | 58 ++++++++++++++++++++++++++++++++-------------------
 include/linux/quota.h |  3 ++-
 3 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 2aa4151f99d2..5b307e2b5719 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -198,15 +198,26 @@ static int quota_setquota(struct super_block *sb, int type, qid_t id,
 	return sb->s_qcop->set_dqblk(sb, qid, &fdq);
 }
 
-static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr)
+static int quota_enable(struct super_block *sb, void __user *addr)
 {
 	__u32 flags;
 
 	if (copy_from_user(&flags, addr, sizeof(flags)))
 		return -EFAULT;
-	if (!sb->s_qcop->set_xstate)
+	if (!sb->s_qcop->quota_enable)
 		return -ENOSYS;
-	return sb->s_qcop->set_xstate(sb, flags, cmd);
+	return sb->s_qcop->quota_enable(sb, flags);
+}
+
+static int quota_disable(struct super_block *sb, void __user *addr)
+{
+	__u32 flags;
+
+	if (copy_from_user(&flags, addr, sizeof(flags)))
+		return -EFAULT;
+	if (!sb->s_qcop->quota_disable)
+		return -ENOSYS;
+	return sb->s_qcop->quota_disable(sb, flags);
 }
 
 static int quota_getxstate(struct super_block *sb, void __user *addr)
@@ -335,8 +346,9 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 			return -ENOSYS;
 		return sb->s_qcop->quota_sync(sb, type);
 	case Q_XQUOTAON:
+		return quota_enable(sb, addr);
 	case Q_XQUOTAOFF:
-		return quota_setxstate(sb, cmd, addr);
+		return quota_disable(sb, addr);
 	case Q_XQUOTARM:
 		return quota_rmxquota(sb, addr);
 	case Q_XGETQSTAT:
diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c
index 8fcd20dbf89a..a46bb8094307 100644
--- a/fs/xfs/xfs_quotaops.c
+++ b/fs/xfs/xfs_quotaops.c
@@ -64,19 +64,9 @@ xfs_fs_get_xstatev(
 	return xfs_qm_scall_getqstatv(mp, fqs);
 }
 
-STATIC int
-xfs_fs_set_xstate(
-	struct super_block	*sb,
-	unsigned int		uflags,
-	int			op)
+static unsigned int xfs_quota_flags(unsigned int uflags)
 {
-	struct xfs_mount	*mp = XFS_M(sb);
-	unsigned int		flags = 0;
-
-	if (sb->s_flags & MS_RDONLY)
-		return -EROFS;
-	if (!XFS_IS_QUOTA_RUNNING(mp))
-		return -ENOSYS;
+	unsigned int flags = 0;
 
 	if (uflags & FS_QUOTA_UDQ_ACCT)
 		flags |= XFS_UQUOTA_ACCT;
@@ -91,16 +81,39 @@ xfs_fs_set_xstate(
 	if (uflags & FS_QUOTA_PDQ_ENFD)
 		flags |= XFS_PQUOTA_ENFD;
 
-	switch (op) {
-	case Q_XQUOTAON:
-		return xfs_qm_scall_quotaon(mp, flags);
-	case Q_XQUOTAOFF:
-		if (!XFS_IS_QUOTA_ON(mp))
-			return -EINVAL;
-		return xfs_qm_scall_quotaoff(mp, flags);
-	}
+	return flags;
+}
+
+STATIC int
+xfs_quota_enable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+
+	return xfs_qm_scall_quotaon(mp, xfs_quota_flags(uflags));
+}
+
+STATIC int
+xfs_quota_disable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+	if (!XFS_IS_QUOTA_ON(mp))
+		return -EINVAL;
 
-	return -EINVAL;
+	return xfs_qm_scall_quotaoff(mp, xfs_quota_flags(uflags));
 }
 
 STATIC int
@@ -166,7 +179,8 @@ xfs_fs_set_dqblk(
 const struct quotactl_ops xfs_quotactl_operations = {
 	.get_xstatev		= xfs_fs_get_xstatev,
 	.get_xstate		= xfs_fs_get_xstate,
-	.set_xstate		= xfs_fs_set_xstate,
+	.quota_enable		= xfs_quota_enable,
+	.quota_disable		= xfs_quota_disable,
 	.rm_xquota		= xfs_fs_rm_xquota,
 	.get_dqblk		= xfs_fs_get_dqblk,
 	.set_dqblk		= xfs_fs_set_dqblk,
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 0c42113607ce..79e8b03f75fb 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -328,13 +328,14 @@ struct quotactl_ops {
 	int (*quota_on)(struct super_block *, int, int, struct path *);
 	int (*quota_on_meta)(struct super_block *, int, int);
 	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
 	int (*quota_sync)(struct super_block *, int);
 	int (*get_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*set_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*get_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*set_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
-	int (*set_xstate)(struct super_block *, unsigned int, int);
 	int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
-- 
2.1.2

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

WARNING: multiple messages have this Message-ID (diff)
From: Jan Kara <jack@suse.cz>
To: linux-fsdevel@vger.kernel.org
Cc: xfs@oss.sgi.com, cluster-devel@redhat.com,
	ocfs2-devel@oss.oracle.com, Jan Kara <jack@suse.cz>
Subject: [Ocfs2-devel] [PATCH 01/17] quota: Split ->set_xstate callback into two
Date: Fri, 16 Jan 2015 13:47:35 +0100	[thread overview]
Message-ID: <1421412471-4747-2-git-send-email-jack@suse.cz> (raw)
In-Reply-To: <1421412471-4747-1-git-send-email-jack@suse.cz>

Split ->set_xstate callback into two callbacks - one for turning quotas
on (->quota_enable) and one for turning quotas off (->quota_disable). That
way we don't have to pass quotactl command into the callback which seems
cleaner.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/quota/quota.c      | 20 ++++++++++++++----
 fs/xfs/xfs_quotaops.c | 58 ++++++++++++++++++++++++++++++++-------------------
 include/linux/quota.h |  3 ++-
 3 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 2aa4151f99d2..5b307e2b5719 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -198,15 +198,26 @@ static int quota_setquota(struct super_block *sb, int type, qid_t id,
 	return sb->s_qcop->set_dqblk(sb, qid, &fdq);
 }
 
-static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr)
+static int quota_enable(struct super_block *sb, void __user *addr)
 {
 	__u32 flags;
 
 	if (copy_from_user(&flags, addr, sizeof(flags)))
 		return -EFAULT;
-	if (!sb->s_qcop->set_xstate)
+	if (!sb->s_qcop->quota_enable)
 		return -ENOSYS;
-	return sb->s_qcop->set_xstate(sb, flags, cmd);
+	return sb->s_qcop->quota_enable(sb, flags);
+}
+
+static int quota_disable(struct super_block *sb, void __user *addr)
+{
+	__u32 flags;
+
+	if (copy_from_user(&flags, addr, sizeof(flags)))
+		return -EFAULT;
+	if (!sb->s_qcop->quota_disable)
+		return -ENOSYS;
+	return sb->s_qcop->quota_disable(sb, flags);
 }
 
 static int quota_getxstate(struct super_block *sb, void __user *addr)
@@ -335,8 +346,9 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 			return -ENOSYS;
 		return sb->s_qcop->quota_sync(sb, type);
 	case Q_XQUOTAON:
+		return quota_enable(sb, addr);
 	case Q_XQUOTAOFF:
-		return quota_setxstate(sb, cmd, addr);
+		return quota_disable(sb, addr);
 	case Q_XQUOTARM:
 		return quota_rmxquota(sb, addr);
 	case Q_XGETQSTAT:
diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c
index 8fcd20dbf89a..a46bb8094307 100644
--- a/fs/xfs/xfs_quotaops.c
+++ b/fs/xfs/xfs_quotaops.c
@@ -64,19 +64,9 @@ xfs_fs_get_xstatev(
 	return xfs_qm_scall_getqstatv(mp, fqs);
 }
 
-STATIC int
-xfs_fs_set_xstate(
-	struct super_block	*sb,
-	unsigned int		uflags,
-	int			op)
+static unsigned int xfs_quota_flags(unsigned int uflags)
 {
-	struct xfs_mount	*mp = XFS_M(sb);
-	unsigned int		flags = 0;
-
-	if (sb->s_flags & MS_RDONLY)
-		return -EROFS;
-	if (!XFS_IS_QUOTA_RUNNING(mp))
-		return -ENOSYS;
+	unsigned int flags = 0;
 
 	if (uflags & FS_QUOTA_UDQ_ACCT)
 		flags |= XFS_UQUOTA_ACCT;
@@ -91,16 +81,39 @@ xfs_fs_set_xstate(
 	if (uflags & FS_QUOTA_PDQ_ENFD)
 		flags |= XFS_PQUOTA_ENFD;
 
-	switch (op) {
-	case Q_XQUOTAON:
-		return xfs_qm_scall_quotaon(mp, flags);
-	case Q_XQUOTAOFF:
-		if (!XFS_IS_QUOTA_ON(mp))
-			return -EINVAL;
-		return xfs_qm_scall_quotaoff(mp, flags);
-	}
+	return flags;
+}
+
+STATIC int
+xfs_quota_enable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+
+	return xfs_qm_scall_quotaon(mp, xfs_quota_flags(uflags));
+}
+
+STATIC int
+xfs_quota_disable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+	if (!XFS_IS_QUOTA_ON(mp))
+		return -EINVAL;
 
-	return -EINVAL;
+	return xfs_qm_scall_quotaoff(mp, xfs_quota_flags(uflags));
 }
 
 STATIC int
@@ -166,7 +179,8 @@ xfs_fs_set_dqblk(
 const struct quotactl_ops xfs_quotactl_operations = {
 	.get_xstatev		= xfs_fs_get_xstatev,
 	.get_xstate		= xfs_fs_get_xstate,
-	.set_xstate		= xfs_fs_set_xstate,
+	.quota_enable		= xfs_quota_enable,
+	.quota_disable		= xfs_quota_disable,
 	.rm_xquota		= xfs_fs_rm_xquota,
 	.get_dqblk		= xfs_fs_get_dqblk,
 	.set_dqblk		= xfs_fs_set_dqblk,
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 0c42113607ce..79e8b03f75fb 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -328,13 +328,14 @@ struct quotactl_ops {
 	int (*quota_on)(struct super_block *, int, int, struct path *);
 	int (*quota_on_meta)(struct super_block *, int, int);
 	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
 	int (*quota_sync)(struct super_block *, int);
 	int (*get_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*set_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*get_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*set_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
-	int (*set_xstate)(struct super_block *, unsigned int, int);
 	int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
-- 
2.1.2

WARNING: multiple messages have this Message-ID (diff)
From: Jan Kara <jack@suse.cz>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 01/17] quota: Split ->set_xstate callback into two
Date: Fri, 16 Jan 2015 13:47:35 +0100	[thread overview]
Message-ID: <1421412471-4747-2-git-send-email-jack@suse.cz> (raw)
In-Reply-To: <1421412471-4747-1-git-send-email-jack@suse.cz>

Split ->set_xstate callback into two callbacks - one for turning quotas
on (->quota_enable) and one for turning quotas off (->quota_disable). That
way we don't have to pass quotactl command into the callback which seems
cleaner.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/quota/quota.c      | 20 ++++++++++++++----
 fs/xfs/xfs_quotaops.c | 58 ++++++++++++++++++++++++++++++++-------------------
 include/linux/quota.h |  3 ++-
 3 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 2aa4151f99d2..5b307e2b5719 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -198,15 +198,26 @@ static int quota_setquota(struct super_block *sb, int type, qid_t id,
 	return sb->s_qcop->set_dqblk(sb, qid, &fdq);
 }
 
-static int quota_setxstate(struct super_block *sb, int cmd, void __user *addr)
+static int quota_enable(struct super_block *sb, void __user *addr)
 {
 	__u32 flags;
 
 	if (copy_from_user(&flags, addr, sizeof(flags)))
 		return -EFAULT;
-	if (!sb->s_qcop->set_xstate)
+	if (!sb->s_qcop->quota_enable)
 		return -ENOSYS;
-	return sb->s_qcop->set_xstate(sb, flags, cmd);
+	return sb->s_qcop->quota_enable(sb, flags);
+}
+
+static int quota_disable(struct super_block *sb, void __user *addr)
+{
+	__u32 flags;
+
+	if (copy_from_user(&flags, addr, sizeof(flags)))
+		return -EFAULT;
+	if (!sb->s_qcop->quota_disable)
+		return -ENOSYS;
+	return sb->s_qcop->quota_disable(sb, flags);
 }
 
 static int quota_getxstate(struct super_block *sb, void __user *addr)
@@ -335,8 +346,9 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 			return -ENOSYS;
 		return sb->s_qcop->quota_sync(sb, type);
 	case Q_XQUOTAON:
+		return quota_enable(sb, addr);
 	case Q_XQUOTAOFF:
-		return quota_setxstate(sb, cmd, addr);
+		return quota_disable(sb, addr);
 	case Q_XQUOTARM:
 		return quota_rmxquota(sb, addr);
 	case Q_XGETQSTAT:
diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c
index 8fcd20dbf89a..a46bb8094307 100644
--- a/fs/xfs/xfs_quotaops.c
+++ b/fs/xfs/xfs_quotaops.c
@@ -64,19 +64,9 @@ xfs_fs_get_xstatev(
 	return xfs_qm_scall_getqstatv(mp, fqs);
 }
 
-STATIC int
-xfs_fs_set_xstate(
-	struct super_block	*sb,
-	unsigned int		uflags,
-	int			op)
+static unsigned int xfs_quota_flags(unsigned int uflags)
 {
-	struct xfs_mount	*mp = XFS_M(sb);
-	unsigned int		flags = 0;
-
-	if (sb->s_flags & MS_RDONLY)
-		return -EROFS;
-	if (!XFS_IS_QUOTA_RUNNING(mp))
-		return -ENOSYS;
+	unsigned int flags = 0;
 
 	if (uflags & FS_QUOTA_UDQ_ACCT)
 		flags |= XFS_UQUOTA_ACCT;
@@ -91,16 +81,39 @@ xfs_fs_set_xstate(
 	if (uflags & FS_QUOTA_PDQ_ENFD)
 		flags |= XFS_PQUOTA_ENFD;
 
-	switch (op) {
-	case Q_XQUOTAON:
-		return xfs_qm_scall_quotaon(mp, flags);
-	case Q_XQUOTAOFF:
-		if (!XFS_IS_QUOTA_ON(mp))
-			return -EINVAL;
-		return xfs_qm_scall_quotaoff(mp, flags);
-	}
+	return flags;
+}
+
+STATIC int
+xfs_quota_enable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+
+	return xfs_qm_scall_quotaon(mp, xfs_quota_flags(uflags));
+}
+
+STATIC int
+xfs_quota_disable(
+	struct super_block	*sb,
+	unsigned int		uflags)
+{
+	struct xfs_mount	*mp = XFS_M(sb);
+
+	if (sb->s_flags & MS_RDONLY)
+		return -EROFS;
+	if (!XFS_IS_QUOTA_RUNNING(mp))
+		return -ENOSYS;
+	if (!XFS_IS_QUOTA_ON(mp))
+		return -EINVAL;
 
-	return -EINVAL;
+	return xfs_qm_scall_quotaoff(mp, xfs_quota_flags(uflags));
 }
 
 STATIC int
@@ -166,7 +179,8 @@ xfs_fs_set_dqblk(
 const struct quotactl_ops xfs_quotactl_operations = {
 	.get_xstatev		= xfs_fs_get_xstatev,
 	.get_xstate		= xfs_fs_get_xstate,
-	.set_xstate		= xfs_fs_set_xstate,
+	.quota_enable		= xfs_quota_enable,
+	.quota_disable		= xfs_quota_disable,
 	.rm_xquota		= xfs_fs_rm_xquota,
 	.get_dqblk		= xfs_fs_get_dqblk,
 	.set_dqblk		= xfs_fs_set_dqblk,
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 0c42113607ce..79e8b03f75fb 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -328,13 +328,14 @@ struct quotactl_ops {
 	int (*quota_on)(struct super_block *, int, int, struct path *);
 	int (*quota_on_meta)(struct super_block *, int, int);
 	int (*quota_off)(struct super_block *, int);
+	int (*quota_enable)(struct super_block *, unsigned int);
+	int (*quota_disable)(struct super_block *, unsigned int);
 	int (*quota_sync)(struct super_block *, int);
 	int (*get_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*set_info)(struct super_block *, int, struct if_dqinfo *);
 	int (*get_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*set_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 	int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
-	int (*set_xstate)(struct super_block *, unsigned int, int);
 	int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
 	int (*rm_xquota)(struct super_block *, unsigned int);
 };
-- 
2.1.2



  reply	other threads:[~2015-01-16 12:48 UTC|newest]

Thread overview: 150+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-16 12:47 [PATCH 0/17 v3] quota: Unify VFS and XFS quota interfaces Jan Kara
2015-01-16 12:47 ` [Cluster-devel] " Jan Kara
2015-01-16 12:47 ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47 ` Jan Kara
2015-01-16 12:47 ` Jan Kara [this message]
2015-01-16 12:47   ` [Cluster-devel] [PATCH 01/17] quota: Split ->set_xstate callback into two Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:00   ` Christoph Hellwig
2015-01-19  9:00     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:00     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:00     ` Christoph Hellwig
2015-01-16 12:47 ` [PATCH 02/17] quota: Wire up ->quota_{enable,disable} callbacks into Q_QUOTA{ON,OFF} Jan Kara
2015-01-16 12:47   ` [Cluster-devel] [PATCH 02/17] quota: Wire up ->quota_{enable, disable} callbacks into Q_QUOTA{ON, OFF} Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:01   ` [PATCH 02/17] quota: Wire up ->quota_{enable,disable} callbacks into Q_QUOTA{ON,OFF} Christoph Hellwig
2015-01-19  9:01     ` [Cluster-devel] [PATCH 02/17] quota: Wire up ->quota_{enable, disable} callbacks into Q_QUOTA{ON, OFF} Christoph Hellwig
2015-01-19  9:01     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:01     ` [PATCH 02/17] quota: Wire up ->quota_{enable,disable} callbacks into Q_QUOTA{ON,OFF} Christoph Hellwig
2015-01-20 17:01     ` Jan Kara
2015-01-20 17:01       ` [Cluster-devel] [PATCH 02/17] quota: Wire up ->quota_{enable, disable} callbacks into Q_QUOTA{ON, OFF} Jan Kara
2015-01-20 17:01       ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47 ` [PATCH 03/17] quota: Add ->quota_{enable, disable} callbacks for VFS quotas Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-19  9:02   ` [PATCH 03/17] quota: Add ->quota_{enable,disable} " Christoph Hellwig
2015-01-19  9:02     ` [Cluster-devel] [PATCH 03/17] quota: Add ->quota_{enable, disable} " Christoph Hellwig
2015-01-19  9:02     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:02     ` [PATCH 03/17] quota: Add ->quota_{enable,disable} " Christoph Hellwig
2015-01-20 17:08     ` Jan Kara
2015-01-20 17:08       ` [Cluster-devel] [PATCH 03/17] quota: Add ->quota_{enable, disable} " Jan Kara
2015-01-20 17:08       ` [Ocfs2-devel] " Jan Kara
2015-01-20 17:08       ` [PATCH 03/17] quota: Add ->quota_{enable,disable} " Jan Kara
2015-01-16 12:47 ` [PATCH 04/17] ext4: Use generic helpers for quotaon and quotaoff Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-19  9:03   ` Christoph Hellwig
2015-01-19  9:03     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:03     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-16 12:47 ` [PATCH 05/17] ocfs2: " Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:03   ` Christoph Hellwig
2015-01-19  9:03     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:03     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:03     ` Christoph Hellwig
2015-01-20 17:13     ` Jan Kara
2015-01-20 17:13       ` [Cluster-devel] " Jan Kara
2015-01-20 17:13       ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47 ` [PATCH 06/17] quota: Remove quota_on_meta callback Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:04   ` Christoph Hellwig
2015-01-19  9:04     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:04     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-16 12:47 ` [PATCH 07/17] quota: Switch ->get_dqblk() and ->set_dqblk() to use bytes as space units Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:07   ` Christoph Hellwig
2015-01-19  9:07     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:07     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:07     ` Christoph Hellwig
2015-01-20 16:53     ` Jan Kara
2015-01-20 16:53       ` [Cluster-devel] " Jan Kara
2015-01-20 16:53       ` [Ocfs2-devel] " Jan Kara
2015-01-20 16:53       ` Jan Kara
2015-01-16 12:47 ` [PATCH 08/17] quota: Store maximum space limit in bytes Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:07   ` Christoph Hellwig
2015-01-19  9:07     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:07     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:07     ` Christoph Hellwig
2015-01-16 12:47 ` [PATCH 09/17] quota: Make Q_XQUOTASYNC support VFS quota syncing Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:09   ` Christoph Hellwig
2015-01-19  9:09     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:09     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:09     ` Christoph Hellwig
2015-01-20 17:16     ` Jan Kara
2015-01-20 17:16       ` [Cluster-devel] " Jan Kara
2015-01-20 17:16       ` [Ocfs2-devel] " Jan Kara
2015-01-20 17:16       ` Jan Kara
2015-01-16 12:47 ` [PATCH 10/17] quota: Make VFS quotas use new interface for getting quota info Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:10   ` Christoph Hellwig
2015-01-19  9:10     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:10     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-16 12:47 ` [PATCH 11/17] quota: Wire up Q_GETXSTATE and Q_GETXSTATV calls to work with ->get_state Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:11   ` Christoph Hellwig
2015-01-19  9:11     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:11     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-16 12:47 ` [PATCH 12/17] xfs: Convert to using ->get_state callback Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:38   ` Christoph Hellwig
2015-01-19  9:38     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:38     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-20 17:33     ` Jan Kara
2015-01-20 17:33       ` [Cluster-devel] " Jan Kara
2015-01-20 17:33       ` [Ocfs2-devel] " Jan Kara
2015-01-20 17:33       ` Jan Kara
2015-01-16 12:47 ` [PATCH 13/17] gfs2: " Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-16 12:47 ` [PATCH 14/17] quota: Remove ->get_xstate and ->get_xstatev callbacks Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-19  9:38   ` Christoph Hellwig
2015-01-19  9:38     ` [Cluster-devel] " Christoph Hellwig
2015-01-19  9:38     ` [Ocfs2-devel] " Christoph Hellwig
2015-01-19  9:38     ` Christoph Hellwig
2015-01-16 12:47 ` [PATCH 15/17] quota: Make ->set_info use structure with neccesary info to VFS and XFS Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-16 12:47 ` [PATCH 16/17] xfs: Add support for Q_SETINFO Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-16 12:47 ` [PATCH 17/17] quota: Hook up Q_XSETQLIM for id 0 to ->set_info Jan Kara
2015-01-16 12:47   ` [Cluster-devel] " Jan Kara
2015-01-16 12:47   ` [Ocfs2-devel] " Jan Kara
2015-01-16 12:47   ` Jan Kara
2015-01-21 21:38 ` [PATCH 0/17 v3] quota: Unify VFS and XFS quota interfaces Dave Chinner
2015-01-21 21:38   ` [Cluster-devel] " Dave Chinner
2015-01-21 21:38   ` [Ocfs2-devel] " Dave Chinner
2015-01-21 21:38   ` Dave Chinner
2015-01-21 22:23   ` Jan Kara
2015-01-21 22:23     ` [Cluster-devel] " Jan Kara
2015-01-21 22:23     ` [Ocfs2-devel] " Jan Kara
2015-01-21 22:23     ` Jan Kara
2015-01-21 23:10     ` Dave Chinner
2015-01-21 23:10       ` [Cluster-devel] " Dave Chinner
2015-01-21 23:10       ` [Ocfs2-devel] " Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1421412471-4747-2-git-send-email-jack@suse.cz \
    --to=jack@suse.cz \
    --cc=cluster-devel@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=ocfs2-devel@oss.oracle.com \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.