From: Dave Chinner <david@fromorbit.com>
To: Arkadiusz Miskiewicz <arekm@maven.pl>
Cc: Christoph Hellwig <hch@infradead.org>, xfs@oss.sgi.com
Subject: Re: separate project quota from group quota (questions, design issues)
Date: Mon, 6 Sep 2010 11:12:13 +1000 [thread overview]
Message-ID: <20100906011213.GY7362@dastard> (raw)
In-Reply-To: <201009051924.36443.arekm@maven.pl>
On Sun, Sep 05, 2010 at 07:24:35PM +0200, Arkadiusz Miskiewicz wrote:
> On Sunday 05 of September 2010, Christoph Hellwig wrote:
> > Thanks for doing this work Arek, I think it will be useful for some
> > users and defintively is cleaners than what we have now.
> >
> > > I started doing that by splitting every group+project handling code into
> > > separate group and project one. Added superblock field for project quota.
> > > New feature flag (SEPARATEPQUOTA).
> >
> > Ok.
> >
> > > If old filesystem (for SEPARATEQUOTA) is mounted then I'll simply load
> > > sb_gquotino into mp->m_sb.sb_pquotino which I think is enough to handle
> > > old fs (since new kernel operates on separate structures for project
> > > quota).
> >
> > Do you mean an old filesystem without the SEPARATEQUOTA bit set here?
>
> Yes. When trying to load existing project quota inode in
> xfs_qm_init_quotainos() I'm doing:
>
> + if (!xfs_sb_version_hasseparatepquota(&mp->m_sb)) {
> + ASSERT(!XFS_IS_GQUOTA_ON(mp));
> + mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino;
> + mp->m_sb.sb_gquotino = 0;
> + }
>
> While xfs_mod_sb() now does:
>
> /*
> * Filesystem has no separatepquota turned on,
> * so we need to store project quota in group
> * quota inode on disk.
> */
> if (!xfs_sb_version_hasseparatepquota(&mp->m_sb)) {
> mp->m_sb.sb_gquotino = mp->m_sb.sb_pquotino;
> mp->m_sb.sb_pquotino = 0;
> }
>
> xfs_sb_to_disk(XFS_BUF_TO_SBP(bp), &mp->m_sb, fields);
>
> [...]
> /*
> * Restore original in-memory project quota inode state.
> */
> if (!xfs_sb_version_hasseparatepquota(&mp->m_sb)) {
> mp->m_sb.sb_pquotino = mp->m_sb.sb_gquotino;
> mp->m_sb.sb_gquotino = 0;
> }
I don't think that is safe - we can have concurrent access to the
in-core superblock (mp->m_sb) without locking the superblock, so
something that races with xfs_mod_sb() looking up project quota
could die a horrible death here.
The only time that you should need to do this juggling is when the
quota inode changes. That is, when the XFS_SB_GQUOTINO field is
set. Otherwise the field won't be modified and so we don't need to
convert the values. That only occurs when quotas are being
initialised (xfs_qm_qino_alloc()) during mount, so in that case
there can't be any concurrent operations occurring. Hence swizzling
the inode fields only when the XFS_SB_GQUOTINO filed is set should
be safe.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2010-09-06 1:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-04 8:00 separate project quota from group quota (questions, design issues) Arkadiusz Miskiewicz
2010-09-04 17:13 ` Michael Monnerie
2010-09-04 23:30 ` Christoph Hellwig
2010-09-05 17:24 ` Arkadiusz Miskiewicz
2010-09-06 1:12 ` Dave Chinner [this message]
2010-09-06 6:28 ` Arkadiusz Miskiewicz
2010-09-06 1:16 ` 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=20100906011213.GY7362@dastard \
--to=david@fromorbit.com \
--cc=arekm@maven.pl \
--cc=hch@infradead.org \
--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.