From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org, hch@lst.de,
Dave Chinner <david@fromorbit.com>
Subject: Re: [PATCH 09/13] xfs: remove direct calls to _qm_dqread
Date: Wed, 9 May 2018 12:40:22 -0400 [thread overview]
Message-ID: <20180509164022.GC66101@bfoster.bfoster> (raw)
In-Reply-To: <20180508000535.GZ11261@magnolia>
On Mon, May 07, 2018 at 05:05:35PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> The quota initialization code needs an "uncached" variant of _dqget to
> read in default quota limits and timers before the dquot cache is fully
> set up. We've already split up _dqget into its component pieces so
> create a fourth variant to address this need, and make dqread internal
> to xfs_dquot.c again.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
Looks good to me:
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/xfs_dquot.c | 24 +++++++++++++++++++++++-
> fs/xfs/xfs_dquot.h | 5 +++--
> fs/xfs/xfs_qm.c | 25 +++++++++++++------------
> 3 files changed, 39 insertions(+), 15 deletions(-)
>
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index 54c16f76d12d..0cb4b553db28 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -586,7 +586,7 @@ xfs_qm_dqread_alloc(
> *
> * If XFS_QMOPT_DQALLOC is set, allocate a dquot on disk if it needed.
> */
> -int
> +static int
> xfs_qm_dqread(
> struct xfs_mount *mp,
> xfs_dqid_t id,
> @@ -832,6 +832,28 @@ xfs_qm_dqget(
> return 0;
> }
>
> +/*
> + * Given a dquot id and type, read and initialize a dquot from the on-disk
> + * metadata. This function is only for use during quota initialization so
> + * it ignores the dquot cache assuming that the dquot shrinker isn't set up.
> + * The caller is responsible for _qm_dqdestroy'ing the returned dquot.
> + */
> +int
> +xfs_qm_dqget_uncached(
> + struct xfs_mount *mp,
> + xfs_dqid_t id,
> + uint type,
> + struct xfs_dquot **dqpp)
> +{
> + int error;
> +
> + error = xfs_qm_dqget_checks(mp, type);
> + if (error)
> + return error;
> +
> + return xfs_qm_dqread(mp, id, type, 0, dqpp);
> +}
> +
> /* Return the quota id for a given inode and type. */
> xfs_dqid_t
> xfs_qm_id_for_quotatype(
> diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h
> index 8a5b30e952b0..38a42874a98c 100644
> --- a/fs/xfs/xfs_dquot.h
> +++ b/fs/xfs/xfs_dquot.h
> @@ -160,8 +160,6 @@ static inline bool xfs_dquot_lowsp(struct xfs_dquot *dqp)
> #define XFS_QM_ISPDQ(dqp) ((dqp)->dq_flags & XFS_DQ_PROJ)
> #define XFS_QM_ISGDQ(dqp) ((dqp)->dq_flags & XFS_DQ_GROUP)
>
> -extern int xfs_qm_dqread(struct xfs_mount *, xfs_dqid_t, uint,
> - uint, struct xfs_dquot **);
> extern void xfs_qm_dqdestroy(xfs_dquot_t *);
> extern int xfs_qm_dqflush(struct xfs_dquot *, struct xfs_buf **);
> extern void xfs_qm_dqunpin_wait(xfs_dquot_t *);
> @@ -179,6 +177,9 @@ extern int xfs_qm_dqget_inode(struct xfs_inode *ip, uint type,
> struct xfs_dquot **dqpp);
> extern int xfs_qm_dqget_next(struct xfs_mount *mp, xfs_dqid_t id,
> uint type, struct xfs_dquot **dqpp);
> +extern int xfs_qm_dqget_uncached(struct xfs_mount *mp,
> + xfs_dqid_t id, uint type,
> + struct xfs_dquot **dqpp);
> extern void xfs_qm_dqput(xfs_dquot_t *);
>
> extern void xfs_dqlock2(struct xfs_dquot *, struct xfs_dquot *);
> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
> index b9244b8983b3..ea06762aa6c1 100644
> --- a/fs/xfs/xfs_qm.c
> +++ b/fs/xfs/xfs_qm.c
> @@ -563,8 +563,7 @@ xfs_qm_set_defquota(
> struct xfs_def_quota *defq;
> int error;
>
> - error = xfs_qm_dqread(mp, 0, type, 0, &dqp);
> -
> + error = xfs_qm_dqget_uncached(mp, 0, type, &dqp);
> if (!error) {
> xfs_disk_dquot_t *ddqp = &dqp->q_core;
>
> @@ -590,11 +589,12 @@ xfs_qm_set_defquota(
> */
> STATIC int
> xfs_qm_init_quotainfo(
> - xfs_mount_t *mp)
> + struct xfs_mount *mp)
> {
> - xfs_quotainfo_t *qinf;
> - int error;
> - xfs_dquot_t *dqp;
> + struct xfs_quotainfo *qinf;
> + struct xfs_dquot *dqp;
> + uint type;
> + int error;
>
> ASSERT(XFS_IS_QUOTA_RUNNING(mp));
>
> @@ -637,12 +637,13 @@ xfs_qm_init_quotainfo(
> * user/group/proj quota types, otherwise a default value is used.
> * This should be split into different fields per quota type.
> */
> - error = xfs_qm_dqread(mp, 0,
> - XFS_IS_UQUOTA_RUNNING(mp) ? XFS_DQ_USER :
> - (XFS_IS_GQUOTA_RUNNING(mp) ? XFS_DQ_GROUP :
> - XFS_DQ_PROJ),
> - 0, &dqp);
> -
> + if (XFS_IS_UQUOTA_RUNNING(mp))
> + type = XFS_DQ_USER;
> + else if (XFS_IS_GQUOTA_RUNNING(mp))
> + type = XFS_DQ_GROUP;
> + else
> + type = XFS_DQ_PROJ;
> + error = xfs_qm_dqget_uncached(mp, 0, type, &dqp);
> if (!error) {
> xfs_disk_dquot_t *ddqp = &dqp->q_core;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-05-09 16:40 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-30 5:43 [PATCH v2 00/13] xfs-4.18: quota refactor Darrick J. Wong
2018-04-30 5:43 ` [PATCH 01/13] xfs: refactor XFS_QMOPT_DQNEXT out of existence Darrick J. Wong
2018-04-30 5:43 ` [PATCH 02/13] xfs: refactor dquot cache handling Darrick J. Wong
2018-04-30 5:43 ` [PATCH 03/13] xfs: delegate dqget input checks to helper function Darrick J. Wong
2018-04-30 5:43 ` [PATCH 04/13] xfs: remove unnecessary xfs_qm_dqattach parameter Darrick J. Wong
2018-04-30 5:43 ` [PATCH 05/13] xfs: split out dqget for inodes from regular dqget Darrick J. Wong
2018-04-30 5:43 ` [PATCH 06/13] xfs: fetch dquots directly during quotacheck Darrick J. Wong
2018-04-30 5:43 ` [PATCH 07/13] xfs: refactor incore dquot initialization functions Darrick J. Wong
2018-04-30 5:44 ` [PATCH 08/13] xfs: refactor xfs_qm_dqtobp and xfs_qm_dqalloc Darrick J. Wong
2018-05-01 13:44 ` Brian Foster
2018-05-02 16:32 ` Christoph Hellwig
2018-05-03 0:10 ` Darrick J. Wong
2018-04-30 5:44 ` [PATCH 09/13] xfs: remove xfs_qm_dqread flags argument Darrick J. Wong
2018-05-01 13:44 ` Brian Foster
2018-05-02 16:34 ` Christoph Hellwig
2018-05-02 16:58 ` Darrick J. Wong
2018-05-07 14:41 ` Christoph Hellwig
2018-05-08 0:04 ` Darrick J. Wong
2018-05-08 0:05 ` [PATCH 09/13] xfs: remove direct calls to _qm_dqread Darrick J. Wong
2018-05-09 16:40 ` Brian Foster [this message]
2018-05-10 8:26 ` Christoph Hellwig
2018-05-10 15:20 ` Darrick J. Wong
2018-04-30 5:44 ` [PATCH 10/13] xfs: replace XFS_QMOPT_DQALLOC with XFS_DQGET_{ALLOC, EXISTS} Darrick J. Wong
2018-04-30 5:47 ` [PATCH v2 10/13] xfs: replace XFS_QMOPT_DQALLOC with boolean Darrick J. Wong
2018-05-01 13:45 ` Brian Foster
2018-05-01 15:52 ` Darrick J. Wong
2018-05-02 16:35 ` Christoph Hellwig
2018-04-30 5:44 ` [PATCH 11/13] xfs: report failing address when dquot verifier fails Darrick J. Wong
2018-04-30 5:44 ` [PATCH 12/13] xfs: rename on-disk dquot counter zap functions Darrick J. Wong
2018-05-01 13:45 ` Brian Foster
2018-05-02 16:35 ` Christoph Hellwig
2018-04-30 5:44 ` [PATCH 13/13] xfs: refactor dquot iteration Darrick J. Wong
2018-05-01 13:45 ` Brian Foster
2018-05-01 15:53 ` Darrick J. Wong
2018-05-02 16:37 ` Christoph Hellwig
2018-05-02 16:43 ` [PATCH v2 " Darrick J. Wong
2018-05-03 17:53 ` [PATCH 0.1/13] xfs: release new dquot buffer on defer_finish error Darrick J. Wong
2018-05-04 11:31 ` Brian Foster
2018-05-04 15:12 ` Darrick J. Wong
2018-05-04 15:41 ` Brian Foster
2018-05-04 15:52 ` Darrick J. Wong
2018-05-04 16:03 ` Brian Foster
2018-05-04 20:05 ` Darrick J. Wong
2018-05-04 21:19 ` [PATCH v2 " Darrick J. Wong
2018-05-07 11:03 ` Brian Foster
2018-05-03 17:54 ` [PATCH 0.2/13] xfs: don't spray logs when dquot flush/purge fail Darrick J. Wong
2018-05-04 11:32 ` Brian Foster
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=20180509164022.GC66101@bfoster.bfoster \
--to=bfoster@redhat.com \
--cc=darrick.wong@oracle.com \
--cc=david@fromorbit.com \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
/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.