|
@@ -723,7 +723,7 @@ xfs_qm_dqget(
|
|
|
uint flags, /* DQALLOC, DQSUSER, DQREPAIR, DOWARN */
|
|
|
xfs_dquot_t **O_dqpp) /* OUT : locked incore dquot */
|
|
|
{
|
|
|
- xfs_dquot_t *dqp;
|
|
|
+ xfs_dquot_t *dqp, *dqp1;
|
|
|
xfs_dqhash_t *h;
|
|
|
uint version;
|
|
|
int error;
|
|
@@ -750,10 +750,7 @@ xfs_qm_dqget(
|
|
|
type == XFS_DQ_GROUP);
|
|
|
if (ip) {
|
|
|
ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
|
|
|
- if (type == XFS_DQ_USER)
|
|
|
- ASSERT(ip->i_udquot == NULL);
|
|
|
- else
|
|
|
- ASSERT(ip->i_gdquot == NULL);
|
|
|
+ ASSERT(xfs_inode_dquot(ip, type) == NULL);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -819,30 +816,18 @@ restart:
|
|
|
* A dquot could be attached to this inode by now, since
|
|
|
* we had dropped the ilock.
|
|
|
*/
|
|
|
- if (type == XFS_DQ_USER) {
|
|
|
- if (!XFS_IS_UQUOTA_ON(mp)) {
|
|
|
- /* inode stays locked on return */
|
|
|
- xfs_qm_dqdestroy(dqp);
|
|
|
- return XFS_ERROR(ESRCH);
|
|
|
- }
|
|
|
- if (ip->i_udquot) {
|
|
|
+ if (xfs_this_quota_on(mp, type)) {
|
|
|
+ dqp1 = xfs_inode_dquot(ip, type);
|
|
|
+ if (dqp1) {
|
|
|
xfs_qm_dqdestroy(dqp);
|
|
|
- dqp = ip->i_udquot;
|
|
|
+ dqp = dqp1;
|
|
|
xfs_dqlock(dqp);
|
|
|
goto dqret;
|
|
|
}
|
|
|
} else {
|
|
|
- if (!XFS_IS_OQUOTA_ON(mp)) {
|
|
|
- /* inode stays locked on return */
|
|
|
- xfs_qm_dqdestroy(dqp);
|
|
|
- return XFS_ERROR(ESRCH);
|
|
|
- }
|
|
|
- if (ip->i_gdquot) {
|
|
|
- xfs_qm_dqdestroy(dqp);
|
|
|
- dqp = ip->i_gdquot;
|
|
|
- xfs_dqlock(dqp);
|
|
|
- goto dqret;
|
|
|
- }
|
|
|
+ /* inode stays locked on return */
|
|
|
+ xfs_qm_dqdestroy(dqp);
|
|
|
+ return XFS_ERROR(ESRCH);
|
|
|
}
|
|
|
}
|
|
|
|