Message ID | 1413902316-17997-10-git-send-email-jack@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Oct 21, 2014 at 04:38:33PM +0200, Jan Kara wrote: > CC: Mark Fasheh <mfasheh@suse.com> > CC: Joel Becker <jlbec@evilplan.org> > CC: ocfs2-devel@oss.oracle.com > Signed-off-by: Jan Kara <jack@suse.cz> > --- > fs/ocfs2/inode.h | 4 ++++ > fs/ocfs2/super.c | 10 ++++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h > index a9b76de46047..1bb2e27eaad7 100644 > --- a/fs/ocfs2/inode.h > +++ b/fs/ocfs2/inode.h > @@ -80,6 +80,10 @@ struct ocfs2_inode_info > */ > tid_t i_sync_tid; > tid_t i_datasync_tid; > + > +#ifdef CONFIG_QUOTA > + struct dquot *i_dquot[MAXQUOTAS]; > +#endif > }; > > /* > diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c > index 93c85bc745e1..9a97986d54f5 100644 > --- a/fs/ocfs2/super.c > +++ b/fs/ocfs2/super.c > @@ -143,6 +143,11 @@ static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend); > static int ocfs2_enable_quotas(struct ocfs2_super *osb); > static void ocfs2_disable_quotas(struct ocfs2_super *osb); > > +static struct dquot **ocfs2_get_dquots(struct inode *inode) > +{ > + return OCFS2_I(inode)->i_dquot; > +} Call me silly, but given that ocfs2_inode_info->i_dquot; is wrapped in CONFIG_QUOTA, shouldn't this accessor be as well? Is GCC really smart enough to ignore the undefined member because ocfs2_get_dquots() isn't called? Joel > + > static const struct super_operations ocfs2_sops = { > .statfs = ocfs2_statfs, > .alloc_inode = ocfs2_alloc_inode, > @@ -155,6 +160,7 @@ static const struct super_operations ocfs2_sops = { > .show_options = ocfs2_show_options, > .quota_read = ocfs2_quota_read, > .quota_write = ocfs2_quota_write, > + .get_dquots = ocfs2_get_dquots, > }; > > enum { > @@ -563,6 +569,9 @@ static struct inode *ocfs2_alloc_inode(struct super_block *sb) > > oi->i_sync_tid = 0; > oi->i_datasync_tid = 0; > +#ifdef CONFIG_QUOTA > + memset(&oi->i_dquot, 0, sizeof(oi->i_dquot)); > +#endif > > jbd2_journal_init_jbd_inode(&oi->ip_jinode, &oi->vfs_inode); > return &oi->vfs_inode; > @@ -2073,6 +2082,7 @@ static int ocfs2_initialize_super(struct super_block *sb, > sb->s_export_op = &ocfs2_export_ops; > sb->s_qcop = &ocfs2_quotactl_ops; > sb->dq_op = &ocfs2_quota_operations; > + sb_dqopt(sb)->allowed_types = QTYPE_MASK_USR | QTYPE_MASK_GRP; > sb->s_xattr = ocfs2_xattr_handlers; > sb->s_time_gran = 1; > sb->s_flags |= MS_NOATIME; > -- > 1.8.1.4 >
On Thu 23-10-14 11:25:57, Joel Becker wrote: > On Tue, Oct 21, 2014 at 04:38:33PM +0200, Jan Kara wrote: > > CC: Mark Fasheh <mfasheh@suse.com> > > CC: Joel Becker <jlbec@evilplan.org> > > CC: ocfs2-devel@oss.oracle.com > > Signed-off-by: Jan Kara <jack@suse.cz> > > --- > > fs/ocfs2/inode.h | 4 ++++ > > fs/ocfs2/super.c | 10 ++++++++++ > > 2 files changed, 14 insertions(+) > > > > diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h > > index a9b76de46047..1bb2e27eaad7 100644 > > --- a/fs/ocfs2/inode.h > > +++ b/fs/ocfs2/inode.h > > @@ -80,6 +80,10 @@ struct ocfs2_inode_info > > */ > > tid_t i_sync_tid; > > tid_t i_datasync_tid; > > + > > +#ifdef CONFIG_QUOTA > > + struct dquot *i_dquot[MAXQUOTAS]; > > +#endif > > }; > > > > /* > > diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c > > index 93c85bc745e1..9a97986d54f5 100644 > > --- a/fs/ocfs2/super.c > > +++ b/fs/ocfs2/super.c > > @@ -143,6 +143,11 @@ static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend); > > static int ocfs2_enable_quotas(struct ocfs2_super *osb); > > static void ocfs2_disable_quotas(struct ocfs2_super *osb); > > > > +static struct dquot **ocfs2_get_dquots(struct inode *inode) > > +{ > > + return OCFS2_I(inode)->i_dquot; > > +} > > Call me silly, but given that ocfs2_inode_info->i_dquot; is wrapped in > CONFIG_QUOTA, shouldn't this accessor be as well? Is GCC really smart > enough to ignore the undefined member because ocfs2_get_dquots() isn't > called? Actually, ocfs2 selects QUOTA so it cannot happen that CONFIG_QUOTA isn't defined for ocfs2. I'll remove the CONFIG_QUOTA checks from ocfs2 patch. Honza > > Joel > > > + > > static const struct super_operations ocfs2_sops = { > > .statfs = ocfs2_statfs, > > .alloc_inode = ocfs2_alloc_inode, > > @@ -155,6 +160,7 @@ static const struct super_operations ocfs2_sops = { > > .show_options = ocfs2_show_options, > > .quota_read = ocfs2_quota_read, > > .quota_write = ocfs2_quota_write, > > + .get_dquots = ocfs2_get_dquots, > > }; > > > > enum { > > @@ -563,6 +569,9 @@ static struct inode *ocfs2_alloc_inode(struct super_block *sb) > > > > oi->i_sync_tid = 0; > > oi->i_datasync_tid = 0; > > +#ifdef CONFIG_QUOTA > > + memset(&oi->i_dquot, 0, sizeof(oi->i_dquot)); > > +#endif > > > > jbd2_journal_init_jbd_inode(&oi->ip_jinode, &oi->vfs_inode); > > return &oi->vfs_inode; > > @@ -2073,6 +2082,7 @@ static int ocfs2_initialize_super(struct super_block *sb, > > sb->s_export_op = &ocfs2_export_ops; > > sb->s_qcop = &ocfs2_quotactl_ops; > > sb->dq_op = &ocfs2_quota_operations; > > + sb_dqopt(sb)->allowed_types = QTYPE_MASK_USR | QTYPE_MASK_GRP; > > sb->s_xattr = ocfs2_xattr_handlers; > > sb->s_time_gran = 1; > > sb->s_flags |= MS_NOATIME; > > -- > > 1.8.1.4 > > > > -- > > "I'm so tired of being tired, > Sure as night will follow day. > Most things I worry about > Never happen anyway." > > http://www.jlbec.org/ > jlbec@evilplan.org
diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h index a9b76de46047..1bb2e27eaad7 100644 --- a/fs/ocfs2/inode.h +++ b/fs/ocfs2/inode.h @@ -80,6 +80,10 @@ struct ocfs2_inode_info */ tid_t i_sync_tid; tid_t i_datasync_tid; + +#ifdef CONFIG_QUOTA + struct dquot *i_dquot[MAXQUOTAS]; +#endif }; /* diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 93c85bc745e1..9a97986d54f5 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -143,6 +143,11 @@ static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend); static int ocfs2_enable_quotas(struct ocfs2_super *osb); static void ocfs2_disable_quotas(struct ocfs2_super *osb); +static struct dquot **ocfs2_get_dquots(struct inode *inode) +{ + return OCFS2_I(inode)->i_dquot; +} + static const struct super_operations ocfs2_sops = { .statfs = ocfs2_statfs, .alloc_inode = ocfs2_alloc_inode, @@ -155,6 +160,7 @@ static const struct super_operations ocfs2_sops = { .show_options = ocfs2_show_options, .quota_read = ocfs2_quota_read, .quota_write = ocfs2_quota_write, + .get_dquots = ocfs2_get_dquots, }; enum { @@ -563,6 +569,9 @@ static struct inode *ocfs2_alloc_inode(struct super_block *sb) oi->i_sync_tid = 0; oi->i_datasync_tid = 0; +#ifdef CONFIG_QUOTA + memset(&oi->i_dquot, 0, sizeof(oi->i_dquot)); +#endif jbd2_journal_init_jbd_inode(&oi->ip_jinode, &oi->vfs_inode); return &oi->vfs_inode; @@ -2073,6 +2082,7 @@ static int ocfs2_initialize_super(struct super_block *sb, sb->s_export_op = &ocfs2_export_ops; sb->s_qcop = &ocfs2_quotactl_ops; sb->dq_op = &ocfs2_quota_operations; + sb_dqopt(sb)->allowed_types = QTYPE_MASK_USR | QTYPE_MASK_GRP; sb->s_xattr = ocfs2_xattr_handlers; sb->s_time_gran = 1; sb->s_flags |= MS_NOATIME;
CC: Mark Fasheh <mfasheh@suse.com> CC: Joel Becker <jlbec@evilplan.org> CC: ocfs2-devel@oss.oracle.com Signed-off-by: Jan Kara <jack@suse.cz> --- fs/ocfs2/inode.h | 4 ++++ fs/ocfs2/super.c | 10 ++++++++++ 2 files changed, 14 insertions(+)