All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: linux-fsdevel@vger.kernel.org
Cc: Dave Kleikamp <shaggy@kernel.org>,
	jfs-discussion@lists.sourceforge.net, tytso@mit.edu,
	Jeff Mahoney <jeffm@suse.de>, Mark Fasheh <mfasheh@suse.com>,
	reiserfs-devel@vger.kernel.org, xfs@oss.sgi.com,
	cluster-devel@redhat.com, Joel Becker <jlbec@evilplan.org>,
	Jan Kara <jack@suse.cz>,
	linux-ext4@vger.kernel.org,
	Steven Whitehouse <swhiteho@redhat.com>,
	ocfs2-devel@oss.oracle.com
Subject: [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports
Date: Wed,  1 Oct 2014 21:31:23 +0200	[thread overview]
Message-ID: <1412191894-9113-2-git-send-email-jack@suse.cz> (raw)
In-Reply-To: <1412191894-9113-1-git-send-email-jack@suse.cz>

Currently all filesystems supporting VFS quota support user and group
quotas. With introduction of project quotas this is going to change so
make sure filesystem isn't called for quota type it doesn't support by
introduction of a bitmask determining which quota types each filesystem
supports.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/quota/quota.c      | 13 +++++++++++--
 fs/super.c            |  7 +++++++
 include/linux/quota.h |  1 +
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 75621649dbd7..0f28eac6e638 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -47,8 +47,11 @@ static int check_quotactl_permission(struct super_block *sb, int type, int cmd,
 
 static void quota_sync_one(struct super_block *sb, void *arg)
 {
-	if (sb->s_qcop && sb->s_qcop->quota_sync)
-		sb->s_qcop->quota_sync(sb, *(int *)arg);
+	int type = *(int *)arg;
+
+	if (sb->s_qcop && sb->s_qcop->quota_sync &&
+	    (sb->s_dquot.allowed_types & (1 << type)))
+		sb->s_qcop->quota_sync(sb, type);
 }
 
 static int quota_sync_all(int type)
@@ -297,8 +300,14 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 
 	if (type >= (XQM_COMMAND(cmd) ? XQM_MAXQUOTAS : MAXQUOTAS))
 		return -EINVAL;
+	/*
+	 * Quota not supported on this fs? Check this before allowed_types
+	 * since they needn't be set if quota is not supported.
+	 */
 	if (!sb->s_qcop)
 		return -ENOSYS;
+	if (!(sb->s_dquot.allowed_types & (1 << type)))
+		return -EINVAL;
 
 	ret = check_quotactl_permission(sb, type, cmd, id);
 	if (ret < 0)
diff --git a/fs/super.c b/fs/super.c
index b9a214d2fe98..dc577370f5fd 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -215,6 +215,13 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
 	atomic_set(&s->s_active, 1);
 	mutex_init(&s->s_vfs_rename_mutex);
 	lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key);
+	/*
+	 * For now MAXQUOTAS check in do_quotactl() will limit quota type
+	 * appropriately. When each fs sets allowed_types, we can remove the
+	 * line below
+	 */
+	s->s_dquot.allowed_types = (1 << USRQUOTA) | (1 << GRPQUOTA) |
+				   (1 << PRJQUOTA);
 	mutex_init(&s->s_dquot.dqio_mutex);
 	mutex_init(&s->s_dquot.dqonoff_mutex);
 	s->s_maxbytes = MAX_NON_LFS;
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 80d345a3524c..91f328971acc 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -388,6 +388,7 @@ static inline void quota_send_warning(struct kqid qid, dev_t dev,
 
 struct quota_info {
 	unsigned int flags;			/* Flags for diskquotas on this device */
+	unsigned int allowed_types;		/* Bitmask of quota types this fs supports */
 	struct mutex dqio_mutex;		/* lock device while I/O in progress */
 	struct mutex dqonoff_mutex;		/* Serialize quotaon & quotaoff */
 	struct inode *files[MAXQUOTAS];		/* inodes of quotafiles */
-- 
1.8.1.4

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

WARNING: multiple messages have this Message-ID
From: Jan Kara <jack@suse.cz>
To: linux-fsdevel@vger.kernel.org
Cc: Dave Kleikamp <shaggy@kernel.org>,
	jfs-discussion@lists.sourceforge.net, tytso@mit.edu,
	Jeff Mahoney <jeffm@suse.de>, Mark Fasheh <mfasheh@suse.com>,
	reiserfs-devel@vger.kernel.org, xfs@oss.sgi.com,
	cluster-devel@redhat.com, Joel Becker <jlbec@evilplan.org>,
	Jan Kara <jack@suse.cz>,
	linux-ext4@vger.kernel.org,
	Steven Whitehouse <swhiteho@redhat.com>,
	ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports
Date: Wed,  1 Oct 2014 21:31:23 +0200	[thread overview]
Message-ID: <1412191894-9113-2-git-send-email-jack@suse.cz> (raw)
In-Reply-To: <1412191894-9113-1-git-send-email-jack@suse.cz>

Currently all filesystems supporting VFS quota support user and group
quotas. With introduction of project quotas this is going to change so
make sure filesystem isn't called for quota type it doesn't support by
introduction of a bitmask determining which quota types each filesystem
supports.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/quota/quota.c      | 13 +++++++++++--
 fs/super.c            |  7 +++++++
 include/linux/quota.h |  1 +
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 75621649dbd7..0f28eac6e638 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -47,8 +47,11 @@ static int check_quotactl_permission(struct super_block *sb, int type, int cmd,
 
 static void quota_sync_one(struct super_block *sb, void *arg)
 {
-	if (sb->s_qcop && sb->s_qcop->quota_sync)
-		sb->s_qcop->quota_sync(sb, *(int *)arg);
+	int type = *(int *)arg;
+
+	if (sb->s_qcop && sb->s_qcop->quota_sync &&
+	    (sb->s_dquot.allowed_types & (1 << type)))
+		sb->s_qcop->quota_sync(sb, type);
 }
 
 static int quota_sync_all(int type)
@@ -297,8 +300,14 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 
 	if (type >= (XQM_COMMAND(cmd) ? XQM_MAXQUOTAS : MAXQUOTAS))
 		return -EINVAL;
+	/*
+	 * Quota not supported on this fs? Check this before allowed_types
+	 * since they needn't be set if quota is not supported.
+	 */
 	if (!sb->s_qcop)
 		return -ENOSYS;
+	if (!(sb->s_dquot.allowed_types & (1 << type)))
+		return -EINVAL;
 
 	ret = check_quotactl_permission(sb, type, cmd, id);
 	if (ret < 0)
diff --git a/fs/super.c b/fs/super.c
index b9a214d2fe98..dc577370f5fd 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -215,6 +215,13 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags)
 	atomic_set(&s->s_active, 1);
 	mutex_init(&s->s_vfs_rename_mutex);
 	lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key);
+	/*
+	 * For now MAXQUOTAS check in do_quotactl() will limit quota type
+	 * appropriately. When each fs sets allowed_types, we can remove the
+	 * line below
+	 */
+	s->s_dquot.allowed_types = (1 << USRQUOTA) | (1 << GRPQUOTA) |
+				   (1 << PRJQUOTA);
 	mutex_init(&s->s_dquot.dqio_mutex);
 	mutex_init(&s->s_dquot.dqonoff_mutex);
 	s->s_maxbytes = MAX_NON_LFS;
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 80d345a3524c..91f328971acc 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -388,6 +388,7 @@ static inline void quota_send_warning(struct kqid qid, dev_t dev,
 
 struct quota_info {
 	unsigned int flags;			/* Flags for diskquotas on this device */
+	unsigned int allowed_types;		/* Bitmask of quota types this fs supports */
 	struct mutex dqio_mutex;		/* lock device while I/O in progress */
 	struct mutex dqonoff_mutex;		/* Serialize quotaon & quotaoff */
 	struct inode *files[MAXQUOTAS];		/* inodes of quotafiles */
-- 
1.8.1.4

  reply	other threads:[~2014-10-01 19:31 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-01 19:31 [PATCH 0/12 RFC] Moving i_dquot out of struct inode Jan Kara
2014-10-01 19:31 ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31 ` Jan Kara
2014-10-01 19:31 ` Jan Kara [this message]
2014-10-01 19:31   ` [Ocfs2-devel] [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports Jan Kara
2014-10-01 19:31 ` [PATCH 02/12] gfs2: Set allowed quota types Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-02 10:41   ` Steven Whitehouse
2014-10-02 10:41     ` [Ocfs2-devel] " Steven Whitehouse
2014-10-02 10:41     ` Steven Whitehouse
2014-10-01 19:31 ` [PATCH 03/12] xfs: " Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-06 20:30   ` Dave Chinner
2014-10-06 20:30     ` [Ocfs2-devel] " Dave Chinner
2014-10-07 19:29     ` Jan Kara
2014-10-07 19:29       ` [Ocfs2-devel] " Jan Kara
2014-10-07 19:46       ` Andreas Dilger
2014-10-07 19:46         ` [Ocfs2-devel] " Andreas Dilger
2014-10-07 19:46         ` Andreas Dilger
2014-10-08  8:42         ` Jan Kara
2014-10-08  8:42           ` [Ocfs2-devel] " Jan Kara
2014-10-08  8:42           ` Jan Kara
2014-10-01 19:31 ` [PATCH 04/12] fs: Generic infrastructure for optional inode fields Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 21:05   ` Andreas Dilger
2014-10-01 21:05     ` [Ocfs2-devel] " Andreas Dilger
2014-10-01 21:05     ` Andreas Dilger
2014-10-08  8:45     ` Jan Kara
2014-10-08  8:45       ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31 ` [PATCH 05/12] quota: Use optional inode field for i_dquot pointers Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-01 19:31 ` [PATCH 06/12] ext2: Convert to private i_dquot field Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-01 19:31 ` [PATCH 07/12] ext3: " Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-01 19:31 ` [PATCH 08/12] ext4: " Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-01 19:31 ` [PATCH 09/12] ocfs2: " Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-01 19:31 ` [PATCH 10/12] reiserfs: " Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31 ` [PATCH 11/12] jfs: " Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-01 19:31 ` [PATCH 12/12] vfs: Remove i_dquot field from inode Jan Kara
2014-10-01 19:31   ` [Ocfs2-devel] " Jan Kara
2014-10-01 19:31   ` Jan Kara
2014-10-10 14:54 [PATCH 0/12 v2] Moving i_dquot out of struct inode Jan Kara
2014-10-10 14:54 ` [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports Jan Kara
2014-10-10 14:54   ` Jan Kara
2014-10-10 15:26   ` Dave Kleikamp
2014-10-10 15:26     ` Dave Kleikamp
2014-10-10 15:37     ` Jan Kara
2014-10-10 15:37       ` Jan Kara

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=1412191894-9113-2-git-send-email-jack@suse.cz \
    --to=jack@suse.cz \
    --cc=cluster-devel@redhat.com \
    --cc=jeffm@suse.de \
    --cc=jfs-discussion@lists.sourceforge.net \
    --cc=jlbec@evilplan.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mfasheh@suse.com \
    --cc=ocfs2-devel@oss.oracle.com \
    --cc=reiserfs-devel@vger.kernel.org \
    --cc=shaggy@kernel.org \
    --cc=swhiteho@redhat.com \
    --cc=tytso@mit.edu \
    --cc=xfs@oss.sgi.com \
    --subject='Re: [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports' \
    /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

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.