xfs: Add pquota fields where gquota is used.
Add project quota changes to all the places where group quota field is used: * add separate project quota members into various structures * split project quota and group quotas so that instead of overriding the group quota members incore, the new project quota members are used instead * get rid of usage of the OQUOTA flag incore, in favor of separate group and project quota flags. * add a project dquot argument to various functions. Not using the pquotino field from superblock yet. Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com> Reviewed-by: Ben Myers <bpm@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:

committed by
Ben Myers

parent
42c49d7f24
commit
92f8ff73f1
@@ -163,8 +163,10 @@ xfs_trans_mod_dquot_byino(
|
||||
|
||||
if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot)
|
||||
(void) xfs_trans_mod_dquot(tp, ip->i_udquot, field, delta);
|
||||
if (XFS_IS_OQUOTA_ON(mp) && ip->i_gdquot)
|
||||
if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot)
|
||||
(void) xfs_trans_mod_dquot(tp, ip->i_gdquot, field, delta);
|
||||
if (XFS_IS_PQUOTA_ON(mp) && ip->i_pdquot)
|
||||
(void) xfs_trans_mod_dquot(tp, ip->i_pdquot, field, delta);
|
||||
}
|
||||
|
||||
STATIC struct xfs_dqtrx *
|
||||
@@ -177,8 +179,12 @@ xfs_trans_get_dqtrx(
|
||||
|
||||
if (XFS_QM_ISUDQ(dqp))
|
||||
qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_USR];
|
||||
else
|
||||
else if (XFS_QM_ISGDQ(dqp))
|
||||
qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_GRP];
|
||||
else if (XFS_QM_ISPDQ(dqp))
|
||||
qa = tp->t_dqinfo->dqs[XFS_QM_TRANS_PRJ];
|
||||
else
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < XFS_QM_TRANS_MAXDQS; i++) {
|
||||
if (qa[i].qt_dquot == NULL ||
|
||||
@@ -727,8 +733,8 @@ error_return:
|
||||
|
||||
/*
|
||||
* Given dquot(s), make disk block and/or inode reservations against them.
|
||||
* The fact that this does the reservation against both the usr and
|
||||
* grp/prj quotas is important, because this follows a both-or-nothing
|
||||
* The fact that this does the reservation against user, group and
|
||||
* project quotas is important, because this follows a all-or-nothing
|
||||
* approach.
|
||||
*
|
||||
* flags = XFS_QMOPT_FORCE_RES evades limit enforcement. Used by chown.
|
||||
@@ -743,6 +749,7 @@ xfs_trans_reserve_quota_bydquots(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_dquot *udqp,
|
||||
struct xfs_dquot *gdqp,
|
||||
struct xfs_dquot *pdqp,
|
||||
long nblks,
|
||||
long ninos,
|
||||
uint flags)
|
||||
@@ -770,11 +777,21 @@ xfs_trans_reserve_quota_bydquots(
|
||||
goto unwind_usr;
|
||||
}
|
||||
|
||||
if (pdqp) {
|
||||
error = xfs_trans_dqresv(tp, mp, pdqp, nblks, ninos, flags);
|
||||
if (error)
|
||||
goto unwind_grp;
|
||||
}
|
||||
|
||||
/*
|
||||
* Didn't change anything critical, so, no need to log
|
||||
*/
|
||||
return 0;
|
||||
|
||||
unwind_grp:
|
||||
flags |= XFS_QMOPT_FORCE_RES;
|
||||
if (gdqp)
|
||||
xfs_trans_dqresv(tp, mp, gdqp, -nblks, -ninos, flags);
|
||||
unwind_usr:
|
||||
flags |= XFS_QMOPT_FORCE_RES;
|
||||
if (udqp)
|
||||
@@ -816,6 +833,7 @@ xfs_trans_reserve_quota_nblks(
|
||||
*/
|
||||
return xfs_trans_reserve_quota_bydquots(tp, mp,
|
||||
ip->i_udquot, ip->i_gdquot,
|
||||
ip->i_pdquot,
|
||||
nblks, ninos, flags);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user