mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 15:44:13 +08:00
xfs: convert quotacheck to use the new iwalk functions
Convert quotacheck to use the new iwalk iterator to dig through the inodes. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
a211432c27
commit
ebd126a651
@ -13,7 +13,7 @@
|
||||
#include "xfs_sb.h"
|
||||
#include "xfs_mount.h"
|
||||
#include "xfs_inode.h"
|
||||
#include "xfs_itable.h"
|
||||
#include "xfs_iwalk.h"
|
||||
#include "xfs_quota.h"
|
||||
#include "xfs_bmap.h"
|
||||
#include "xfs_bmap_util.h"
|
||||
@ -1114,17 +1114,15 @@ xfs_qm_quotacheck_dqadjust(
|
||||
/* ARGSUSED */
|
||||
STATIC int
|
||||
xfs_qm_dqusage_adjust(
|
||||
xfs_mount_t *mp, /* mount point for filesystem */
|
||||
xfs_ino_t ino, /* inode number to get data for */
|
||||
void __user *buffer, /* not used */
|
||||
int ubsize, /* not used */
|
||||
int *ubused, /* not used */
|
||||
int *res) /* result code value */
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_trans *tp,
|
||||
xfs_ino_t ino,
|
||||
void *data)
|
||||
{
|
||||
xfs_inode_t *ip;
|
||||
xfs_qcnt_t nblks;
|
||||
xfs_filblks_t rtblks = 0; /* total rt blks */
|
||||
int error;
|
||||
struct xfs_inode *ip;
|
||||
xfs_qcnt_t nblks;
|
||||
xfs_filblks_t rtblks = 0; /* total rt blks */
|
||||
int error;
|
||||
|
||||
ASSERT(XFS_IS_QUOTA_RUNNING(mp));
|
||||
|
||||
@ -1132,20 +1130,18 @@ xfs_qm_dqusage_adjust(
|
||||
* rootino must have its resources accounted for, not so with the quota
|
||||
* inodes.
|
||||
*/
|
||||
if (xfs_is_quota_inode(&mp->m_sb, ino)) {
|
||||
*res = BULKSTAT_RV_NOTHING;
|
||||
return -EINVAL;
|
||||
}
|
||||
if (xfs_is_quota_inode(&mp->m_sb, ino))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* We don't _need_ to take the ilock EXCL here because quotacheck runs
|
||||
* at mount time and therefore nobody will be racing chown/chproj.
|
||||
*/
|
||||
error = xfs_iget(mp, NULL, ino, XFS_IGET_DONTCACHE, 0, &ip);
|
||||
if (error) {
|
||||
*res = BULKSTAT_RV_NOTHING;
|
||||
error = xfs_iget(mp, tp, ino, XFS_IGET_DONTCACHE, 0, &ip);
|
||||
if (error == -EINVAL || error == -ENOENT)
|
||||
return 0;
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
ASSERT(ip->i_delayed_blks == 0);
|
||||
|
||||
@ -1153,7 +1149,7 @@ xfs_qm_dqusage_adjust(
|
||||
struct xfs_ifork *ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK);
|
||||
|
||||
if (!(ifp->if_flags & XFS_IFEXTENTS)) {
|
||||
error = xfs_iread_extents(NULL, ip, XFS_DATA_FORK);
|
||||
error = xfs_iread_extents(tp, ip, XFS_DATA_FORK);
|
||||
if (error)
|
||||
goto error0;
|
||||
}
|
||||
@ -1196,13 +1192,8 @@ xfs_qm_dqusage_adjust(
|
||||
goto error0;
|
||||
}
|
||||
|
||||
xfs_irele(ip);
|
||||
*res = BULKSTAT_RV_DIDONE;
|
||||
return 0;
|
||||
|
||||
error0:
|
||||
xfs_irele(ip);
|
||||
*res = BULKSTAT_RV_GIVEUP;
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -1266,18 +1257,13 @@ STATIC int
|
||||
xfs_qm_quotacheck(
|
||||
xfs_mount_t *mp)
|
||||
{
|
||||
int done, count, error, error2;
|
||||
xfs_ino_t lastino;
|
||||
size_t structsz;
|
||||
int error, error2;
|
||||
uint flags;
|
||||
LIST_HEAD (buffer_list);
|
||||
struct xfs_inode *uip = mp->m_quotainfo->qi_uquotaip;
|
||||
struct xfs_inode *gip = mp->m_quotainfo->qi_gquotaip;
|
||||
struct xfs_inode *pip = mp->m_quotainfo->qi_pquotaip;
|
||||
|
||||
count = INT_MAX;
|
||||
structsz = 1;
|
||||
lastino = 0;
|
||||
flags = 0;
|
||||
|
||||
ASSERT(uip || gip || pip);
|
||||
@ -1314,18 +1300,9 @@ xfs_qm_quotacheck(
|
||||
flags |= XFS_PQUOTA_CHKD;
|
||||
}
|
||||
|
||||
do {
|
||||
/*
|
||||
* Iterate thru all the inodes in the file system,
|
||||
* adjusting the corresponding dquot counters in core.
|
||||
*/
|
||||
error = xfs_bulkstat(mp, &lastino, &count,
|
||||
xfs_qm_dqusage_adjust,
|
||||
structsz, NULL, &done);
|
||||
if (error)
|
||||
break;
|
||||
|
||||
} while (!done);
|
||||
error = xfs_iwalk(mp, NULL, 0, xfs_qm_dqusage_adjust, 0, NULL);
|
||||
if (error)
|
||||
goto error_return;
|
||||
|
||||
/*
|
||||
* We've made all the changes that we need to make incore. Flush them
|
||||
|
Loading…
Reference in New Issue
Block a user