From: Dave Kleikamp <dave.kleikamp@oracle.com>
To: Jan Kara <jack@suse.cz>, 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>,
Dave Chinner <david@fromorbit.com>,
reiserfs-devel@vger.kernel.org, xfs@oss.sgi.com,
cluster-devel@redhat.com, linux-ext4@vger.kernel.org,
Steven Whitehouse <swhiteho@redhat.com>,
ocfs2-devel@oss.oracle.com, viro@zeniv.linux.org.uk
Subject: Re: [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports
Date: Fri, 10 Oct 2014 10:26:41 -0500 [thread overview]
Message-ID: <5437FAB1.1010005@oracle.com> (raw)
In-Reply-To: <1412952910-7142-2-git-send-email-jack@suse.cz>
On 10/10/2014 09:54 AM, Jan Kara wrote:
> 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 | 6 ++++++
> 3 files changed, 24 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..c6c9b2de9e31 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 = QTYPE_MASK_USR | QTYPE_MASK_GRP |
> + QTYPE_MASK_PRJ;
> 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..b52539f42e19 100644
> --- a/include/linux/quota.h
> +++ b/include/linux/quota.h
> @@ -56,6 +56,11 @@ enum quota_type {
> PRJQUOTA = 2, /* element used for project quotas */
> };
>
> +/* Masks for quota types when used as a bitmask */
> +#define QTYPE_MASK_USER (1 << USRQUOTA)
> +#define QTYPE_MASK_GROUP (1 << GRPQUOTA)
> +#define QTYPE_MASK_PROJECT (1 << PRJQUOTA)
The uses of these masks use the names QTYPE_MASK_USR, QTYPE_MASK_GRP,
and QTYPE_MASK_PRJ
> +
> typedef __kernel_uid32_t qid_t; /* Type in which we store ids in memory */
> typedef long long qsize_t; /* Type in which we store sizes */
>
> @@ -388,6 +393,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 */
>
next prev parent reply other threads:[~2014-10-10 15:26 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
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 15:26 ` Dave Kleikamp [this message]
2014-10-10 15:37 ` Jan Kara
2014-10-10 14:55 ` [PATCH 02/12] gfs2: Set allowed quota types Jan Kara
2014-10-10 14:55 ` [PATCH 03/12] xfs: " Jan Kara
2014-10-10 14:55 ` [PATCH 04/12] fs: Generic infrastructure for optional inode fields Jan Kara
2014-10-10 14:55 ` [PATCH 05/12] quota: Use optional inode field for i_dquot pointers Jan Kara
2014-10-10 14:55 ` [PATCH 06/12] ext2: Convert to private i_dquot field Jan Kara
2014-10-10 14:55 ` [PATCH 07/12] ext3: " Jan Kara
2014-10-10 14:55 ` [PATCH 08/12] ext4: " Jan Kara
2014-10-10 14:55 ` [PATCH 09/12] ocfs2: " Jan Kara
2014-10-10 14:55 ` [PATCH 10/12] reiserfs: " Jan Kara
2014-10-10 14:55 ` [PATCH 11/12] jfs: " Jan Kara
2014-10-10 15:33 ` Dave Kleikamp
2014-10-10 15:40 ` Jan Kara
2014-10-10 15:43 ` Dave Kleikamp
2014-10-10 14:55 ` [PATCH 12/12] vfs: Remove i_dquot field from inode Jan Kara
2014-10-11 13:34 ` [PATCH 0/12 v2] Moving i_dquot out of struct inode Christoph Hellwig
2014-10-12 18:53 ` Al Viro
2014-10-17 19:24 ` Jan Kara
2014-10-18 15:17 ` Christoph Hellwig
2014-10-18 19:26 ` Jan Kara
2014-10-19 14:16 ` Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2014-10-01 19:31 [PATCH 0/12 RFC] " Jan Kara
2014-10-01 19:31 ` [PATCH 01/12] quota: Allow each filesystem to specify which quota types it supports 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=5437FAB1.1010005@oracle.com \
--to=dave.kleikamp@oracle.com \
--cc=cluster-devel@redhat.com \
--cc=david@fromorbit.com \
--cc=jack@suse.cz \
--cc=jeffm@suse.de \
--cc=jfs-discussion@lists.sourceforge.net \
--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=viro@zeniv.linux.org.uk \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).