xfs: refactor XFS_QMOPT_DQNEXT out of existence
There's only one caller of DQNEXT and its semantics can be moved into a separate function, so create the function and get rid of the flag. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -622,39 +622,14 @@ out:
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
xfs_qm_scall_getquota(
|
||||
/* Fill out the quota context. */
|
||||
static void
|
||||
xfs_qm_scall_getquota_fill_qc(
|
||||
struct xfs_mount *mp,
|
||||
xfs_dqid_t *id,
|
||||
uint type,
|
||||
struct qc_dqblk *dst,
|
||||
uint dqget_flags)
|
||||
const struct xfs_dquot *dqp,
|
||||
struct qc_dqblk *dst)
|
||||
{
|
||||
struct xfs_dquot *dqp;
|
||||
int error;
|
||||
|
||||
/*
|
||||
* Try to get the dquot. We don't want it allocated on disk, so
|
||||
* we aren't passing the XFS_QMOPT_DOALLOC flag. If it doesn't
|
||||
* exist, we'll get ENOENT back.
|
||||
*/
|
||||
error = xfs_qm_dqget(mp, NULL, *id, type, dqget_flags, &dqp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/*
|
||||
* If everything's NULL, this dquot doesn't quite exist as far as
|
||||
* our utility programs are concerned.
|
||||
*/
|
||||
if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) {
|
||||
error = -ENOENT;
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
/* Fill in the ID we actually read from disk */
|
||||
*id = be32_to_cpu(dqp->q_core.d_id);
|
||||
|
||||
memset(dst, 0, sizeof(*dst));
|
||||
dst->d_spc_hardlimit =
|
||||
XFS_FSB_TO_B(mp, be64_to_cpu(dqp->q_core.d_blk_hardlimit));
|
||||
@@ -696,7 +671,7 @@ xfs_qm_scall_getquota(
|
||||
if (((XFS_IS_UQUOTA_ENFORCED(mp) && type == XFS_DQ_USER) ||
|
||||
(XFS_IS_GQUOTA_ENFORCED(mp) && type == XFS_DQ_GROUP) ||
|
||||
(XFS_IS_PQUOTA_ENFORCED(mp) && type == XFS_DQ_PROJ)) &&
|
||||
*id != 0) {
|
||||
dqp->q_core.d_id != 0) {
|
||||
if ((dst->d_space > dst->d_spc_softlimit) &&
|
||||
(dst->d_spc_softlimit > 0)) {
|
||||
ASSERT(dst->d_spc_timer != 0);
|
||||
@@ -707,11 +682,70 @@ xfs_qm_scall_getquota(
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Return the quota information for the dquot matching id. */
|
||||
int
|
||||
xfs_qm_scall_getquota(
|
||||
struct xfs_mount *mp,
|
||||
xfs_dqid_t id,
|
||||
uint type,
|
||||
struct qc_dqblk *dst)
|
||||
{
|
||||
struct xfs_dquot *dqp;
|
||||
int error;
|
||||
|
||||
/*
|
||||
* Try to get the dquot. We don't want it allocated on disk, so
|
||||
* we aren't passing the XFS_QMOPT_DOALLOC flag. If it doesn't
|
||||
* exist, we'll get ENOENT back.
|
||||
*/
|
||||
error = xfs_qm_dqget(mp, NULL, id, type, 0, &dqp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/*
|
||||
* If everything's NULL, this dquot doesn't quite exist as far as
|
||||
* our utility programs are concerned.
|
||||
*/
|
||||
if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) {
|
||||
error = -ENOENT;
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
xfs_qm_scall_getquota_fill_qc(mp, type, dqp, dst);
|
||||
|
||||
out_put:
|
||||
xfs_qm_dqput(dqp);
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the quota information for the first initialized dquot whose id
|
||||
* is at least as high as id.
|
||||
*/
|
||||
int
|
||||
xfs_qm_scall_getquota_next(
|
||||
struct xfs_mount *mp,
|
||||
xfs_dqid_t *id,
|
||||
uint type,
|
||||
struct qc_dqblk *dst)
|
||||
{
|
||||
struct xfs_dquot *dqp;
|
||||
int error;
|
||||
|
||||
error = xfs_qm_dqget_next(mp, *id, type, &dqp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/* Fill in the ID we actually read from disk */
|
||||
*id = be32_to_cpu(dqp->q_core.d_id);
|
||||
|
||||
xfs_qm_scall_getquota_fill_qc(mp, type, dqp, dst);
|
||||
|
||||
xfs_qm_dqput(dqp);
|
||||
return error;
|
||||
}
|
||||
|
||||
STATIC int
|
||||
xfs_dqrele_inode(
|
||||
|
Reference in New Issue
Block a user