All of lore.kernel.org
 help / color / mirror / Atom feed
From: Allison Collins <allison.henderson@oracle.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 07/18] xfs: stop using q_core limits in the quota code
Date: Wed, 1 Jul 2020 13:16:13 -0700	[thread overview]
Message-ID: <3c04cf31-a8da-e54b-e9e0-41e8360d7a7f@oracle.com> (raw)
In-Reply-To: <159353175596.2864738.3236954866547071975.stgit@magnolia>



On 6/30/20 8:42 AM, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> Add limits fields in the incore dquot, and use that instead of the ones
> in qcore.  This eliminates a bunch of endian conversions and will
> eventually allow us to remove qcore entirely.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Ok, looks reasonable to me
Reviewed-by: Allison Collins <allison.henderson@oracle.com>

> ---
>   fs/xfs/scrub/quota.c     |   36 ++++--------
>   fs/xfs/xfs_dquot.c       |  136 ++++++++++++++++++++++++++--------------------
>   fs/xfs/xfs_dquot.h       |    6 ++
>   fs/xfs/xfs_qm.c          |   14 ++---
>   fs/xfs/xfs_qm.h          |   12 ++--
>   fs/xfs/xfs_qm_bhv.c      |   12 ++--
>   fs/xfs/xfs_qm_syscalls.c |   40 ++++++--------
>   fs/xfs/xfs_trace.h       |   12 +---
>   fs/xfs/xfs_trans_dquot.c |   12 ++--
>   9 files changed, 139 insertions(+), 141 deletions(-)
> 
> 
> diff --git a/fs/xfs/scrub/quota.c b/fs/xfs/scrub/quota.c
> index 9a271f115882..1a1c6996fc69 100644
> --- a/fs/xfs/scrub/quota.c
> +++ b/fs/xfs/scrub/quota.c
> @@ -82,12 +82,6 @@ xchk_quota_item(
>   	struct xfs_disk_dquot	*d = &dq->q_core;
>   	struct xfs_quotainfo	*qi = mp->m_quotainfo;
>   	xfs_fileoff_t		offset;
> -	unsigned long long	bsoft;
> -	unsigned long long	isoft;
> -	unsigned long long	rsoft;
> -	unsigned long long	bhard;
> -	unsigned long long	ihard;
> -	unsigned long long	rhard;
>   	unsigned long long	bcount;
>   	unsigned long long	icount;
>   	unsigned long long	rcount;
> @@ -110,15 +104,6 @@ xchk_quota_item(
>   	if (d->d_pad0 != cpu_to_be32(0) || d->d_pad != cpu_to_be16(0))
>   		xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset);
>   
> -	/* Check the limits. */
> -	bhard = be64_to_cpu(d->d_blk_hardlimit);
> -	ihard = be64_to_cpu(d->d_ino_hardlimit);
> -	rhard = be64_to_cpu(d->d_rtb_hardlimit);
> -
> -	bsoft = be64_to_cpu(d->d_blk_softlimit);
> -	isoft = be64_to_cpu(d->d_ino_softlimit);
> -	rsoft = be64_to_cpu(d->d_rtb_softlimit);
> -
>   	/*
>   	 * Warn if the hard limits are larger than the fs.
>   	 * Administrators can do this, though in production this seems
> @@ -127,19 +112,19 @@ xchk_quota_item(
>   	 * Complain about corruption if the soft limit is greater than
>   	 * the hard limit.
>   	 */
> -	if (bhard > mp->m_sb.sb_dblocks)
> +	if (dq->q_blk.hardlimit > mp->m_sb.sb_dblocks)
>   		xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset);
> -	if (bsoft > bhard)
> +	if (dq->q_blk.softlimit > dq->q_blk.hardlimit)
>   		xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset);
>   
> -	if (ihard > M_IGEO(mp)->maxicount)
> +	if (dq->q_ino.hardlimit > M_IGEO(mp)->maxicount)
>   		xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset);
> -	if (isoft > ihard)
> +	if (dq->q_ino.softlimit > dq->q_ino.hardlimit)
>   		xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset);
>   
> -	if (rhard > mp->m_sb.sb_rblocks)
> +	if (dq->q_rtb.hardlimit > mp->m_sb.sb_rblocks)
>   		xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset);
> -	if (rsoft > rhard)
> +	if (dq->q_rtb.softlimit > dq->q_rtb.hardlimit)
>   		xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset);
>   
>   	/* Check the resource counts. */
> @@ -173,13 +158,16 @@ xchk_quota_item(
>   	if (dq->q_id == 0)
>   		goto out;
>   
> -	if (bhard != 0 && bcount > bhard)
> +	if (dq->q_blk.hardlimit != 0 &&
> +	    bcount > dq->q_blk.hardlimit)
>   		xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset);
>   
> -	if (ihard != 0 && icount > ihard)
> +	if (dq->q_ino.hardlimit != 0 &&
> +	    icount > dq->q_ino.hardlimit)
>   		xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset);
>   
> -	if (rhard != 0 && rcount > rhard)
> +	if (dq->q_rtb.hardlimit != 0 &&
> +	    rcount > dq->q_rtb.hardlimit)
>   		xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset);
>   
>   out:
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index 03624a8f0566..63f744bcbc90 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -70,29 +70,28 @@ xfs_qm_adjust_dqlimits(
>   	struct xfs_dquot	*dq)
>   {
>   	struct xfs_quotainfo	*q = mp->m_quotainfo;
> -	struct xfs_disk_dquot	*d = &dq->q_core;
>   	struct xfs_def_quota	*defq;
>   	int			prealloc = 0;
>   
>   	ASSERT(dq->q_id);
>   	defq = xfs_get_defquota(q, xfs_dquot_type(dq));
>   
> -	if (defq->bsoftlimit && !d->d_blk_softlimit) {
> -		d->d_blk_softlimit = cpu_to_be64(defq->bsoftlimit);
> +	if (defq->bsoftlimit && !dq->q_blk.softlimit) {
> +		dq->q_blk.softlimit = defq->bsoftlimit;
>   		prealloc = 1;
>   	}
> -	if (defq->bhardlimit && !d->d_blk_hardlimit) {
> -		d->d_blk_hardlimit = cpu_to_be64(defq->bhardlimit);
> +	if (defq->bhardlimit && !dq->q_blk.hardlimit) {
> +		dq->q_blk.hardlimit = defq->bhardlimit;
>   		prealloc = 1;
>   	}
> -	if (defq->isoftlimit && !d->d_ino_softlimit)
> -		d->d_ino_softlimit = cpu_to_be64(defq->isoftlimit);
> -	if (defq->ihardlimit && !d->d_ino_hardlimit)
> -		d->d_ino_hardlimit = cpu_to_be64(defq->ihardlimit);
> -	if (defq->rtbsoftlimit && !d->d_rtb_softlimit)
> -		d->d_rtb_softlimit = cpu_to_be64(defq->rtbsoftlimit);
> -	if (defq->rtbhardlimit && !d->d_rtb_hardlimit)
> -		d->d_rtb_hardlimit = cpu_to_be64(defq->rtbhardlimit);
> +	if (defq->isoftlimit && !dq->q_ino.softlimit)
> +		dq->q_ino.softlimit = defq->isoftlimit;
> +	if (defq->ihardlimit && !dq->q_ino.hardlimit)
> +		dq->q_ino.hardlimit = defq->ihardlimit;
> +	if (defq->rtbsoftlimit && !dq->q_rtb.softlimit)
> +		dq->q_rtb.softlimit = defq->rtbsoftlimit;
> +	if (defq->rtbhardlimit && !dq->q_rtb.hardlimit)
> +		dq->q_rtb.hardlimit = defq->rtbhardlimit;
>   
>   	if (prealloc)
>   		xfs_dquot_set_prealloc_limits(dq);
> @@ -124,82 +123,67 @@ xfs_qm_adjust_dqtimers(
>   	defq = xfs_get_defquota(qi, xfs_dquot_type(dq));
>   
>   #ifdef DEBUG
> -	if (d->d_blk_hardlimit)
> -		ASSERT(be64_to_cpu(d->d_blk_softlimit) <=
> -		       be64_to_cpu(d->d_blk_hardlimit));
> -	if (d->d_ino_hardlimit)
> -		ASSERT(be64_to_cpu(d->d_ino_softlimit) <=
> -		       be64_to_cpu(d->d_ino_hardlimit));
> -	if (d->d_rtb_hardlimit)
> -		ASSERT(be64_to_cpu(d->d_rtb_softlimit) <=
> -		       be64_to_cpu(d->d_rtb_hardlimit));
> +	if (dq->q_blk.hardlimit)
> +		ASSERT(dq->q_blk.softlimit <= dq->q_blk.hardlimit);
> +	if (dq->q_ino.hardlimit)
> +		ASSERT(dq->q_ino.softlimit <= dq->q_ino.hardlimit);
> +	if (dq->q_rtb.hardlimit)
> +		ASSERT(dq->q_rtb.softlimit <= dq->q_rtb.hardlimit);
>   #endif
>   
>   	if (!d->d_btimer) {
> -		if ((d->d_blk_softlimit &&
> -		     (be64_to_cpu(d->d_bcount) >
> -		      be64_to_cpu(d->d_blk_softlimit))) ||
> -		    (d->d_blk_hardlimit &&
> -		     (be64_to_cpu(d->d_bcount) >
> -		      be64_to_cpu(d->d_blk_hardlimit)))) {
> +		if ((dq->q_blk.softlimit &&
> +		     (be64_to_cpu(d->d_bcount) > dq->q_blk.softlimit)) ||
> +		    (dq->q_blk.hardlimit &&
> +		     (be64_to_cpu(d->d_bcount) > dq->q_blk.hardlimit))) {
>   			d->d_btimer = cpu_to_be32(ktime_get_real_seconds() +
>   					defq->btimelimit);
>   		} else {
>   			d->d_bwarns = 0;
>   		}
>   	} else {
> -		if ((!d->d_blk_softlimit ||
> -		     (be64_to_cpu(d->d_bcount) <=
> -		      be64_to_cpu(d->d_blk_softlimit))) &&
> -		    (!d->d_blk_hardlimit ||
> -		    (be64_to_cpu(d->d_bcount) <=
> -		     be64_to_cpu(d->d_blk_hardlimit)))) {
> +		if ((!dq->q_blk.softlimit ||
> +		     (be64_to_cpu(d->d_bcount) <= dq->q_blk.softlimit)) &&
> +		    (!dq->q_blk.hardlimit ||
> +		    (be64_to_cpu(d->d_bcount) <= dq->q_blk.hardlimit))) {
>   			d->d_btimer = 0;
>   		}
>   	}
>   
>   	if (!d->d_itimer) {
> -		if ((d->d_ino_softlimit &&
> -		     (be64_to_cpu(d->d_icount) >
> -		      be64_to_cpu(d->d_ino_softlimit))) ||
> -		    (d->d_ino_hardlimit &&
> -		     (be64_to_cpu(d->d_icount) >
> -		      be64_to_cpu(d->d_ino_hardlimit)))) {
> +		if ((dq->q_ino.softlimit &&
> +		     (be64_to_cpu(d->d_icount) > dq->q_ino.softlimit)) ||
> +		    (dq->q_ino.hardlimit &&
> +		     (be64_to_cpu(d->d_icount) > dq->q_ino.hardlimit))) {
>   			d->d_itimer = cpu_to_be32(ktime_get_real_seconds() +
>   					defq->itimelimit);
>   		} else {
>   			d->d_iwarns = 0;
>   		}
>   	} else {
> -		if ((!d->d_ino_softlimit ||
> -		     (be64_to_cpu(d->d_icount) <=
> -		      be64_to_cpu(d->d_ino_softlimit)))  &&
> -		    (!d->d_ino_hardlimit ||
> -		     (be64_to_cpu(d->d_icount) <=
> -		      be64_to_cpu(d->d_ino_hardlimit)))) {
> +		if ((!dq->q_ino.softlimit ||
> +		     (be64_to_cpu(d->d_icount) <= dq->q_ino.softlimit))  &&
> +		    (!dq->q_ino.hardlimit ||
> +		     (be64_to_cpu(d->d_icount) <= dq->q_ino.hardlimit))) {
>   			d->d_itimer = 0;
>   		}
>   	}
>   
>   	if (!d->d_rtbtimer) {
> -		if ((d->d_rtb_softlimit &&
> -		     (be64_to_cpu(d->d_rtbcount) >
> -		      be64_to_cpu(d->d_rtb_softlimit))) ||
> -		    (d->d_rtb_hardlimit &&
> -		     (be64_to_cpu(d->d_rtbcount) >
> -		      be64_to_cpu(d->d_rtb_hardlimit)))) {
> +		if ((dq->q_rtb.softlimit &&
> +		     (be64_to_cpu(d->d_rtbcount) > dq->q_rtb.softlimit)) ||
> +		    (dq->q_rtb.hardlimit &&
> +		     (be64_to_cpu(d->d_rtbcount) > dq->q_rtb.hardlimit))) {
>   			d->d_rtbtimer = cpu_to_be32(ktime_get_real_seconds() +
>   					defq->rtbtimelimit);
>   		} else {
>   			d->d_rtbwarns = 0;
>   		}
>   	} else {
> -		if ((!d->d_rtb_softlimit ||
> -		     (be64_to_cpu(d->d_rtbcount) <=
> -		      be64_to_cpu(d->d_rtb_softlimit))) &&
> -		    (!d->d_rtb_hardlimit ||
> -		     (be64_to_cpu(d->d_rtbcount) <=
> -		      be64_to_cpu(d->d_rtb_hardlimit)))) {
> +		if ((!dq->q_rtb.softlimit ||
> +		     (be64_to_cpu(d->d_rtbcount) <= dq->q_rtb.softlimit)) &&
> +		    (!dq->q_rtb.hardlimit ||
> +		     (be64_to_cpu(d->d_rtbcount) <= dq->q_rtb.hardlimit))) {
>   			d->d_rtbtimer = 0;
>   		}
>   	}
> @@ -290,8 +274,8 @@ xfs_dquot_set_prealloc_limits(struct xfs_dquot *dqp)
>   {
>   	uint64_t space;
>   
> -	dqp->q_prealloc_hi_wmark = be64_to_cpu(dqp->q_core.d_blk_hardlimit);
> -	dqp->q_prealloc_lo_wmark = be64_to_cpu(dqp->q_core.d_blk_softlimit);
> +	dqp->q_prealloc_hi_wmark = dqp->q_blk.hardlimit;
> +	dqp->q_prealloc_lo_wmark = dqp->q_blk.softlimit;
>   	if (!dqp->q_prealloc_lo_wmark) {
>   		dqp->q_prealloc_lo_wmark = dqp->q_prealloc_hi_wmark;
>   		do_div(dqp->q_prealloc_lo_wmark, 100);
> @@ -547,6 +531,12 @@ xfs_dquot_from_disk(
>   
>   	/* copy everything from disk dquot to the incore dquot */
>   	memcpy(&dqp->q_core, ddqp, sizeof(struct xfs_disk_dquot));
> +	dqp->q_blk.hardlimit = be64_to_cpu(ddqp->d_blk_hardlimit);
> +	dqp->q_blk.softlimit = be64_to_cpu(ddqp->d_blk_softlimit);
> +	dqp->q_ino.hardlimit = be64_to_cpu(ddqp->d_ino_hardlimit);
> +	dqp->q_ino.softlimit = be64_to_cpu(ddqp->d_ino_softlimit);
> +	dqp->q_rtb.hardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit);
> +	dqp->q_rtb.softlimit = be64_to_cpu(ddqp->d_rtb_softlimit);
>   
>   	/*
>   	 * Reservation counters are defined as reservation plus current usage
> @@ -569,6 +559,12 @@ xfs_dquot_to_disk(
>   {
>   	memcpy(ddqp, &dqp->q_core, sizeof(struct xfs_disk_dquot));
>   	ddqp->d_flags = dqp->dq_flags & XFS_DQ_ONDISK;
> +	ddqp->d_blk_hardlimit = cpu_to_be64(dqp->q_blk.hardlimit);
> +	ddqp->d_blk_softlimit = cpu_to_be64(dqp->q_blk.softlimit);
> +	ddqp->d_ino_hardlimit = cpu_to_be64(dqp->q_ino.hardlimit);
> +	ddqp->d_ino_softlimit = cpu_to_be64(dqp->q_ino.softlimit);
> +	ddqp->d_rtb_hardlimit = cpu_to_be64(dqp->q_rtb.hardlimit);
> +	ddqp->d_rtb_softlimit = cpu_to_be64(dqp->q_rtb.softlimit);
>   }
>   
>   /* Allocate and initialize the dquot buffer for this in-core dquot. */
> @@ -1123,9 +1119,29 @@ static xfs_failaddr_t
>   xfs_qm_dqflush_check(
>   	struct xfs_dquot	*dqp)
>   {
> +	struct xfs_disk_dquot	*ddq = &dqp->q_core;
> +
>   	if (hweight8(dqp->dq_flags & XFS_DQ_ALLTYPES) != 1)
>   		return __this_address;
>   
> +	if (dqp->q_id == 0)
> +		return NULL;
> +
> +	if (dqp->q_blk.softlimit &&
> +	    be64_to_cpu(ddq->d_bcount) > dqp->q_blk.softlimit &&
> +	    !ddq->d_btimer)
> +		return __this_address;
> +
> +	if (dqp->q_ino.softlimit &&
> +	    be64_to_cpu(ddq->d_icount) > dqp->q_ino.softlimit &&
> +	    !ddq->d_itimer)
> +		return __this_address;
> +
> +	if (dqp->q_rtb.softlimit &&
> +	    be64_to_cpu(ddq->d_rtbcount) > dqp->q_rtb.softlimit &&
> +	    !ddq->d_rtbtimer)
> +		return __this_address;
> +
>   	return NULL;
>   }
>   
> diff --git a/fs/xfs/xfs_dquot.h b/fs/xfs/xfs_dquot.h
> index cb20df1e774f..edb49788c476 100644
> --- a/fs/xfs/xfs_dquot.h
> +++ b/fs/xfs/xfs_dquot.h
> @@ -30,6 +30,10 @@ enum {
>   struct xfs_dquot_res {
>   	/* Total resources allocated and reserved. */
>   	xfs_qcnt_t		reserved;
> +
> +	/* Absolute and preferred limits. */
> +	xfs_qcnt_t		hardlimit;
> +	xfs_qcnt_t		softlimit;
>   };
>   
>   /*
> @@ -142,7 +146,7 @@ static inline bool xfs_dquot_lowsp(struct xfs_dquot *dqp)
>   {
>   	int64_t freesp;
>   
> -	freesp = be64_to_cpu(dqp->q_core.d_blk_hardlimit) - dqp->q_blk.reserved;
> +	freesp = dqp->q_blk.hardlimit - dqp->q_blk.reserved;
>   	if (freesp < dqp->q_low_space[XFS_QLOWSP_1_PCNT])
>   		return true;
>   
> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
> index 6ce3a4402041..54fc3aac1a68 100644
> --- a/fs/xfs/xfs_qm.c
> +++ b/fs/xfs/xfs_qm.c
> @@ -550,26 +550,24 @@ xfs_qm_set_defquota(
>   {
>   	struct xfs_dquot	*dqp;
>   	struct xfs_def_quota	*defq;
> -	struct xfs_disk_dquot	*ddqp;
>   	int			error;
>   
>   	error = xfs_qm_dqget_uncached(mp, 0, type, &dqp);
>   	if (error)
>   		return;
>   
> -	ddqp = &dqp->q_core;
>   	defq = xfs_get_defquota(qinf, xfs_dquot_type(dqp));
>   
>   	/*
>   	 * Timers and warnings have been already set, let's just set the
>   	 * default limits for this quota type
>   	 */
> -	defq->bhardlimit = be64_to_cpu(ddqp->d_blk_hardlimit);
> -	defq->bsoftlimit = be64_to_cpu(ddqp->d_blk_softlimit);
> -	defq->ihardlimit = be64_to_cpu(ddqp->d_ino_hardlimit);
> -	defq->isoftlimit = be64_to_cpu(ddqp->d_ino_softlimit);
> -	defq->rtbhardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit);
> -	defq->rtbsoftlimit = be64_to_cpu(ddqp->d_rtb_softlimit);
> +	defq->bhardlimit = dqp->q_blk.hardlimit;
> +	defq->bsoftlimit = dqp->q_blk.softlimit;
> +	defq->ihardlimit = dqp->q_ino.hardlimit;
> +	defq->isoftlimit = dqp->q_ino.softlimit;
> +	defq->rtbhardlimit = dqp->q_rtb.hardlimit;
> +	defq->rtbsoftlimit = dqp->q_rtb.softlimit;
>   	xfs_qm_dqdestroy(dqp);
>   }
>   
> diff --git a/fs/xfs/xfs_qm.h b/fs/xfs/xfs_qm.h
> index 43b4650cdcdf..84cb8af468b7 100644
> --- a/fs/xfs/xfs_qm.h
> +++ b/fs/xfs/xfs_qm.h
> @@ -20,12 +20,12 @@ extern struct kmem_zone	*xfs_qm_dqtrxzone;
>   #define XFS_DQITER_MAP_SIZE	10
>   
>   #define XFS_IS_DQUOT_UNINITIALIZED(dqp) ( \
> -	!dqp->q_core.d_blk_hardlimit && \
> -	!dqp->q_core.d_blk_softlimit && \
> -	!dqp->q_core.d_rtb_hardlimit && \
> -	!dqp->q_core.d_rtb_softlimit && \
> -	!dqp->q_core.d_ino_hardlimit && \
> -	!dqp->q_core.d_ino_softlimit && \
> +	!dqp->q_blk.hardlimit && \
> +	!dqp->q_blk.softlimit && \
> +	!dqp->q_rtb.hardlimit && \
> +	!dqp->q_rtb.softlimit && \
> +	!dqp->q_ino.hardlimit && \
> +	!dqp->q_ino.softlimit && \
>   	!dqp->q_core.d_bcount && \
>   	!dqp->q_core.d_rtbcount && \
>   	!dqp->q_core.d_icount)
> diff --git a/fs/xfs/xfs_qm_bhv.c b/fs/xfs/xfs_qm_bhv.c
> index 94b2b4b0fc17..0993217e5ac8 100644
> --- a/fs/xfs/xfs_qm_bhv.c
> +++ b/fs/xfs/xfs_qm_bhv.c
> @@ -23,9 +23,9 @@ xfs_fill_statvfs_from_dquot(
>   {
>   	uint64_t		limit;
>   
> -	limit = dqp->q_core.d_blk_softlimit ?
> -		be64_to_cpu(dqp->q_core.d_blk_softlimit) :
> -		be64_to_cpu(dqp->q_core.d_blk_hardlimit);
> +	limit = dqp->q_blk.softlimit ?
> +		dqp->q_blk.softlimit :
> +		dqp->q_blk.hardlimit;
>   	if (limit && statp->f_blocks > limit) {
>   		statp->f_blocks = limit;
>   		statp->f_bfree = statp->f_bavail =
> @@ -33,9 +33,9 @@ xfs_fill_statvfs_from_dquot(
>   			 (statp->f_blocks - dqp->q_blk.reserved) : 0;
>   	}
>   
> -	limit = dqp->q_core.d_ino_softlimit ?
> -		be64_to_cpu(dqp->q_core.d_ino_softlimit) :
> -		be64_to_cpu(dqp->q_core.d_ino_hardlimit);
> +	limit = dqp->q_ino.softlimit ?
> +		dqp->q_ino.softlimit :
> +		dqp->q_ino.hardlimit;
>   	if (limit && statp->f_files > limit) {
>   		statp->f_files = limit;
>   		statp->f_ffree =
> diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
> index 56fe80395679..ab596d389e3e 100644
> --- a/fs/xfs/xfs_qm_syscalls.c
> +++ b/fs/xfs/xfs_qm_syscalls.c
> @@ -495,13 +495,13 @@ xfs_qm_scall_setqlim(
>   	 */
>   	hard = (newlim->d_fieldmask & QC_SPC_HARD) ?
>   		(xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_spc_hardlimit) :
> -			be64_to_cpu(ddq->d_blk_hardlimit);
> +			dqp->q_blk.hardlimit;
>   	soft = (newlim->d_fieldmask & QC_SPC_SOFT) ?
>   		(xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_spc_softlimit) :
> -			be64_to_cpu(ddq->d_blk_softlimit);
> +			dqp->q_blk.softlimit;
>   	if (hard == 0 || hard >= soft) {
> -		ddq->d_blk_hardlimit = cpu_to_be64(hard);
> -		ddq->d_blk_softlimit = cpu_to_be64(soft);
> +		dqp->q_blk.hardlimit = hard;
> +		dqp->q_blk.softlimit = soft;
>   		xfs_dquot_set_prealloc_limits(dqp);
>   		if (id == 0) {
>   			defq->bhardlimit = hard;
> @@ -512,13 +512,13 @@ xfs_qm_scall_setqlim(
>   	}
>   	hard = (newlim->d_fieldmask & QC_RT_SPC_HARD) ?
>   		(xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_rt_spc_hardlimit) :
> -			be64_to_cpu(ddq->d_rtb_hardlimit);
> +			dqp->q_rtb.hardlimit;
>   	soft = (newlim->d_fieldmask & QC_RT_SPC_SOFT) ?
>   		(xfs_qcnt_t) XFS_B_TO_FSB(mp, newlim->d_rt_spc_softlimit) :
> -			be64_to_cpu(ddq->d_rtb_softlimit);
> +			dqp->q_rtb.softlimit;
>   	if (hard == 0 || hard >= soft) {
> -		ddq->d_rtb_hardlimit = cpu_to_be64(hard);
> -		ddq->d_rtb_softlimit = cpu_to_be64(soft);
> +		dqp->q_rtb.hardlimit = hard;
> +		dqp->q_rtb.softlimit = soft;
>   		if (id == 0) {
>   			defq->rtbhardlimit = hard;
>   			defq->rtbsoftlimit = soft;
> @@ -529,13 +529,13 @@ xfs_qm_scall_setqlim(
>   
>   	hard = (newlim->d_fieldmask & QC_INO_HARD) ?
>   		(xfs_qcnt_t) newlim->d_ino_hardlimit :
> -			be64_to_cpu(ddq->d_ino_hardlimit);
> +			dqp->q_ino.hardlimit;
>   	soft = (newlim->d_fieldmask & QC_INO_SOFT) ?
>   		(xfs_qcnt_t) newlim->d_ino_softlimit :
> -			be64_to_cpu(ddq->d_ino_softlimit);
> +			dqp->q_ino.softlimit;
>   	if (hard == 0 || hard >= soft) {
> -		ddq->d_ino_hardlimit = cpu_to_be64(hard);
> -		ddq->d_ino_softlimit = cpu_to_be64(soft);
> +		dqp->q_ino.hardlimit = hard;
> +		dqp->q_ino.softlimit = soft;
>   		if (id == 0) {
>   			defq->ihardlimit = hard;
>   			defq->isoftlimit = soft;
> @@ -619,10 +619,8 @@ xfs_qm_scall_getquota_fill_qc(
>   	struct qc_dqblk		*dst)
>   {
>   	memset(dst, 0, sizeof(*dst));
> -	dst->d_spc_hardlimit =
> -		XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_blk_hardlimit));
> -	dst->d_spc_softlimit =
> -		XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit));
> +	dst->d_spc_hardlimit = XFS_FSB_TO_B(mp, dqp->q_blk.hardlimit);
> +	dst->d_spc_softlimit = XFS_FSB_TO_B(mp, dqp->q_blk.softlimit);
>   	dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit);
>   	dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit);
>   	dst->d_space = XFS_FSB_TO_B(mp, dqp->q_blk.reserved);
> @@ -631,10 +629,8 @@ xfs_qm_scall_getquota_fill_qc(
>   	dst->d_ino_timer = be32_to_cpu(dqp->q_core.d_itimer);
>   	dst->d_ino_warns = be16_to_cpu(dqp->q_core.d_iwarns);
>   	dst->d_spc_warns = be16_to_cpu(dqp->q_core.d_bwarns);
> -	dst->d_rt_spc_hardlimit =
> -		XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit));
> -	dst->d_rt_spc_softlimit =
> -		XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit));
> +	dst->d_rt_spc_hardlimit = XFS_FSB_TO_B(mp, dqp->q_rtb.hardlimit);
> +	dst->d_rt_spc_softlimit = XFS_FSB_TO_B(mp, dqp->q_rtb.softlimit);
>   	dst->d_rt_space = XFS_FSB_TO_B(mp, dqp->q_rtb.reserved);
>   	dst->d_rt_spc_timer = be32_to_cpu(dqp->q_core.d_rtbtimer);
>   	dst->d_rt_spc_warns = be16_to_cpu(dqp->q_core.d_rtbwarns);
> @@ -661,8 +657,8 @@ xfs_qm_scall_getquota_fill_qc(
>   		    (dst->d_spc_softlimit > 0)) {
>   			ASSERT(dst->d_spc_timer != 0);
>   		}
> -		if ((dst->d_ino_count > dst->d_ino_softlimit) &&
> -		    (dst->d_ino_softlimit > 0)) {
> +		if ((dst->d_ino_count > dqp->q_ino.softlimit) &&
> +		    (dqp->q_ino.softlimit > 0)) {
>   			ASSERT(dst->d_ino_timer != 0);
>   		}
>   	}
> diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
> index 71567ed367f2..7f744a37dc0e 100644
> --- a/fs/xfs/xfs_trace.h
> +++ b/fs/xfs/xfs_trace.h
> @@ -882,14 +882,10 @@ DECLARE_EVENT_CLASS(xfs_dquot_class,
>   		__entry->res_bcount = dqp->q_blk.reserved;
>   		__entry->bcount = be64_to_cpu(dqp->q_core.d_bcount);
>   		__entry->icount = be64_to_cpu(dqp->q_core.d_icount);
> -		__entry->blk_hardlimit =
> -			be64_to_cpu(dqp->q_core.d_blk_hardlimit);
> -		__entry->blk_softlimit =
> -			be64_to_cpu(dqp->q_core.d_blk_softlimit);
> -		__entry->ino_hardlimit =
> -			be64_to_cpu(dqp->q_core.d_ino_hardlimit);
> -		__entry->ino_softlimit =
> -			be64_to_cpu(dqp->q_core.d_ino_softlimit);
> +		__entry->blk_hardlimit = dqp->q_blk.hardlimit;
> +		__entry->blk_softlimit = dqp->q_blk.softlimit;
> +		__entry->ino_hardlimit = dqp->q_ino.hardlimit;
> +		__entry->ino_softlimit = dqp->q_ino.softlimit;
>   	),
>   	TP_printk("dev %d:%d id 0x%x flags %s nrefs %u res_bc 0x%llx "
>   		  "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx "
> diff --git a/fs/xfs/xfs_trans_dquot.c b/fs/xfs/xfs_trans_dquot.c
> index 469bf7946d3d..7a3d64eb9fbf 100644
> --- a/fs/xfs/xfs_trans_dquot.c
> +++ b/fs/xfs/xfs_trans_dquot.c
> @@ -593,10 +593,10 @@ xfs_trans_dqresv(
>   	defq = xfs_get_defquota(q, xfs_dquot_type(dqp));
>   
>   	if (flags & XFS_TRANS_DQ_RES_BLKS) {
> -		hardlimit = be64_to_cpu(dqp->q_core.d_blk_hardlimit);
> +		hardlimit = dqp->q_blk.hardlimit;
>   		if (!hardlimit)
>   			hardlimit = defq->bhardlimit;
> -		softlimit = be64_to_cpu(dqp->q_core.d_blk_softlimit);
> +		softlimit = dqp->q_blk.softlimit;
>   		if (!softlimit)
>   			softlimit = defq->bsoftlimit;
>   		timer = be32_to_cpu(dqp->q_core.d_btimer);
> @@ -605,10 +605,10 @@ xfs_trans_dqresv(
>   		resbcountp = &dqp->q_blk.reserved;
>   	} else {
>   		ASSERT(flags & XFS_TRANS_DQ_RES_RTBLKS);
> -		hardlimit = be64_to_cpu(dqp->q_core.d_rtb_hardlimit);
> +		hardlimit = dqp->q_rtb.hardlimit;
>   		if (!hardlimit)
>   			hardlimit = defq->rtbhardlimit;
> -		softlimit = be64_to_cpu(dqp->q_core.d_rtb_softlimit);
> +		softlimit = dqp->q_rtb.softlimit;
>   		if (!softlimit)
>   			softlimit = defq->rtbsoftlimit;
>   		timer = be32_to_cpu(dqp->q_core.d_rtbtimer);
> @@ -649,10 +649,10 @@ xfs_trans_dqresv(
>   			timer = be32_to_cpu(dqp->q_core.d_itimer);
>   			warns = be16_to_cpu(dqp->q_core.d_iwarns);
>   			warnlimit = defq->iwarnlimit;
> -			hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit);
> +			hardlimit = dqp->q_ino.hardlimit;
>   			if (!hardlimit)
>   				hardlimit = defq->ihardlimit;
> -			softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit);
> +			softlimit = dqp->q_ino.softlimit;
>   			if (!softlimit)
>   				softlimit = defq->isoftlimit;
>   
> 

  parent reply	other threads:[~2020-07-01 20:16 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-30 15:41 [PATCH 00/18] xfs: remove xfs_disk_quot from incore dquot Darrick J. Wong
2020-06-30 15:41 ` [PATCH 01/18] xfs: clear XFS_DQ_FREEING if we can't lock the dquot buffer to flush Darrick J. Wong
2020-06-30 21:35   ` Allison Collins
2020-07-01  8:32   ` Chandan Babu R
2020-07-01  8:33   ` Christoph Hellwig
2020-07-01 22:42     ` Dave Chinner
2020-06-30 15:42 ` [PATCH 02/18] xfs: fix inode quota reservation checks Darrick J. Wong
2020-06-30 21:35   ` Allison Collins
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:34   ` Christoph Hellwig
2020-06-30 15:42 ` [PATCH 03/18] xfs: validate ondisk/incore dquot flags Darrick J. Wong
2020-06-30 21:35   ` Allison Collins
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:42   ` Christoph Hellwig
2020-07-01 18:25     ` Darrick J. Wong
2020-07-02  6:30       ` Christoph Hellwig
2020-07-02 15:13         ` Darrick J. Wong
2020-07-01 22:41   ` Dave Chinner
2020-07-01 23:16     ` Darrick J. Wong
2020-06-30 15:42 ` [PATCH 04/18] xfs: stop using q_core.d_flags in the quota code Darrick J. Wong
2020-07-01  8:34   ` Chandan Babu R
2020-07-01  8:47   ` Christoph Hellwig
2020-07-01 19:02     ` Darrick J. Wong
2020-07-01 20:15   ` Allison Collins
2020-07-01 22:50   ` Dave Chinner
2020-07-01 23:19     ` Darrick J. Wong
2020-07-01 23:44       ` Dave Chinner
2020-07-01 23:50         ` Darrick J. Wong
2020-07-03  0:58           ` Dave Chinner
2020-07-03 18:01             ` Darrick J. Wong
2020-06-30 15:42 ` [PATCH 05/18] xfs: stop using q_core.d_id " Darrick J. Wong
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:48   ` Christoph Hellwig
2020-07-01 20:16   ` Allison Collins
2020-06-30 15:42 ` [PATCH 06/18] xfs: use a per-resource struct for incore dquot data Darrick J. Wong
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:49   ` Christoph Hellwig
2020-07-01 20:16   ` Allison Collins
2020-06-30 15:42 ` [PATCH 07/18] xfs: stop using q_core limits in the quota code Darrick J. Wong
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:50   ` Christoph Hellwig
2020-07-01 20:16   ` Allison Collins [this message]
2020-07-01 23:01   ` Dave Chinner
2020-07-01 23:13     ` Darrick J. Wong
2020-07-01 23:33       ` Darrick J. Wong
2020-07-01 23:45         ` Dave Chinner
2020-06-30 15:42 ` [PATCH 08/18] xfs: stop using q_core counters " Darrick J. Wong
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:51   ` Christoph Hellwig
2020-07-01 23:20   ` Allison Collins
2020-06-30 15:42 ` [PATCH 09/18] xfs: stop using q_core warning " Darrick J. Wong
2020-07-01  8:33   ` Chandan Babu R
2020-07-01  8:51   ` Christoph Hellwig
2020-07-01 23:20   ` Allison Collins
2020-06-30 15:42 ` [PATCH 10/18] xfs: stop using q_core timers " Darrick J. Wong
2020-07-01  8:34   ` Chandan Babu R
2020-07-01  8:51   ` Christoph Hellwig
2020-07-01 23:20   ` Allison Collins
2020-06-30 15:43 ` [PATCH 11/18] xfs: remove qcore from incore dquots Darrick J. Wong
2020-07-01  8:34   ` Chandan Babu R
2020-07-01  8:52   ` Christoph Hellwig
2020-07-01 23:07   ` Dave Chinner
2020-07-01 23:14     ` Darrick J. Wong
2020-07-02  2:06   ` Allison Collins
2020-06-30 15:43 ` [PATCH 12/18] xfs: refactor default quota limits by resource Darrick J. Wong
2020-07-01  8:52   ` Chandan Babu R
2020-07-01  8:53   ` Christoph Hellwig
2020-07-01 23:30   ` Dave Chinner
2020-07-02  0:07     ` Darrick J. Wong
2020-07-02  2:06   ` Allison Collins
2020-06-30 15:43 ` [PATCH 13/18] xfs: remove unnecessary arguments from quota adjust functions Darrick J. Wong
2020-07-01  8:53   ` Christoph Hellwig
2020-07-01  8:58   ` Chandan Babu R
2020-07-02  2:06   ` Allison Collins
2020-06-30 15:43 ` [PATCH 14/18] xfs: refactor quota exceeded test Darrick J. Wong
2020-07-01  8:56   ` Christoph Hellwig
2020-07-01 17:51     ` Darrick J. Wong
2020-07-01 18:48       ` Eric Sandeen
2020-07-01 23:34       ` Dave Chinner
2020-07-01 10:19   ` Chandan Babu R
2020-07-02 18:57   ` Allison Collins
2020-06-30 15:43 ` [PATCH 15/18] xfs: refactor xfs_qm_scall_setqlim Darrick J. Wong
2020-07-01  8:56   ` Christoph Hellwig
2020-07-03  4:11   ` Allison Collins
2020-07-03 12:39   ` Chandan Babu R
2020-06-30 15:43 ` [PATCH 16/18] xfs: refactor xfs_trans_dqresv Darrick J. Wong
2020-07-03  4:11   ` Allison Collins
2020-07-03 13:00   ` Chandan Babu R
2020-06-30 15:43 ` [PATCH 17/18] xfs: refactor xfs_trans_apply_dquot_deltas Darrick J. Wong
2020-07-04 20:41   ` Allison Collins
2020-07-06 13:40   ` Chandan Babu R
2020-06-30 15:43 ` [PATCH 18/18] xfs: add more dquot tracepoints Darrick J. Wong
2020-07-04 20:41   ` Allison Collins
2020-07-06 13:42   ` Chandan Babu R

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=3c04cf31-a8da-e54b-e9e0-41e8360d7a7f@oracle.com \
    --to=allison.henderson@oracle.com \
    --cc=darrick.wong@oracle.com \
    --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.