Define a new function xfs_inode_dquot()
Define a new function xfs_inode_dquot() that takes a inode pointer and a disk quota type and returns the quota pointer for the specified quota type. This simplifies the xfs_qm_dqget() error path significantly. Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
Родитель
6967b964c1
Коммит
3673141083
|
@ -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 */
|
||||
if (xfs_this_quota_on(mp, type)) {
|
||||
dqp1 = xfs_inode_dquot(ip, type);
|
||||
if (dqp1) {
|
||||
xfs_qm_dqdestroy(dqp);
|
||||
return XFS_ERROR(ESRCH);
|
||||
}
|
||||
if (ip->i_udquot) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -128,6 +128,19 @@ static inline int xfs_this_quota_on(struct xfs_mount *mp, int type)
|
|||
}
|
||||
}
|
||||
|
||||
static inline xfs_dquot_t *xfs_inode_dquot(struct xfs_inode *ip, int type)
|
||||
{
|
||||
switch (type & XFS_DQ_ALLTYPES) {
|
||||
case XFS_DQ_USER:
|
||||
return ip->i_udquot;
|
||||
case XFS_DQ_GROUP:
|
||||
case XFS_DQ_PROJ:
|
||||
return ip->i_gdquot;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#define XFS_DQ_IS_LOCKED(dqp) (mutex_is_locked(&((dqp)->q_qlock)))
|
||||
#define XFS_DQ_IS_DIRTY(dqp) ((dqp)->dq_flags & XFS_DQ_DIRTY)
|
||||
#define XFS_QM_ISUDQ(dqp) ((dqp)->dq_flags & XFS_DQ_USER)
|
||||
|
|
Загрузка…
Ссылка в новой задаче