mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 10:45:49 +00:00
xfs: don't count metadata directory files to quota
Files in the metadata directory tree are internal to the filesystem. Don't count the inodes or the blocks they use in the root dquot because users do not need to know about their resource usage. This will also quiet down complaints about dquot usage not matching du output. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
df866c538f
commit
382e275f0e
@ -983,6 +983,7 @@ xfs_qm_dqget_inode(
|
||||
|
||||
xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
|
||||
ASSERT(xfs_inode_dquot(ip, type) == NULL);
|
||||
ASSERT(!xfs_is_metadir_inode(ip));
|
||||
|
||||
id = xfs_qm_id_for_quotatype(ip, type);
|
||||
|
||||
|
@ -304,6 +304,8 @@ xfs_qm_need_dqattach(
|
||||
return false;
|
||||
if (xfs_is_quota_inode(&mp->m_sb, ip->i_ino))
|
||||
return false;
|
||||
if (xfs_is_metadir_inode(ip))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -326,6 +328,7 @@ xfs_qm_dqattach_locked(
|
||||
return 0;
|
||||
|
||||
xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
|
||||
ASSERT(!xfs_is_metadir_inode(ip));
|
||||
|
||||
if (XFS_IS_UQUOTA_ON(mp) && !ip->i_udquot) {
|
||||
error = xfs_qm_dqattach_one(ip, XFS_DQTYPE_USER,
|
||||
@ -1204,6 +1207,10 @@ xfs_qm_dqusage_adjust(
|
||||
}
|
||||
}
|
||||
|
||||
/* Metadata directory files are not accounted to user-visible quotas. */
|
||||
if (xfs_is_metadir_inode(ip))
|
||||
goto error0;
|
||||
|
||||
ASSERT(ip->i_delayed_blks == 0);
|
||||
|
||||
if (XFS_IS_REALTIME_INODE(ip)) {
|
||||
@ -1754,6 +1761,8 @@ xfs_qm_vop_dqalloc(
|
||||
if (!XFS_IS_QUOTA_ON(mp))
|
||||
return 0;
|
||||
|
||||
ASSERT(!xfs_is_metadir_inode(ip));
|
||||
|
||||
lockflags = XFS_ILOCK_EXCL;
|
||||
xfs_ilock(ip, lockflags);
|
||||
|
||||
@ -1883,6 +1892,7 @@ xfs_qm_vop_chown(
|
||||
|
||||
xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
|
||||
ASSERT(XFS_IS_QUOTA_ON(ip->i_mount));
|
||||
ASSERT(!xfs_is_metadir_inode(ip));
|
||||
|
||||
/* old dquot */
|
||||
prevdq = *IO_olddq;
|
||||
@ -1970,6 +1980,7 @@ xfs_qm_vop_create_dqattach(
|
||||
return;
|
||||
|
||||
xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
|
||||
ASSERT(!xfs_is_metadir_inode(ip));
|
||||
|
||||
if (udqp && XFS_IS_UQUOTA_ON(mp)) {
|
||||
ASSERT(ip->i_udquot == NULL);
|
||||
|
@ -29,6 +29,11 @@ struct xfs_buf;
|
||||
(XFS_IS_GQUOTA_ON(mp) && (ip)->i_gdquot == NULL) || \
|
||||
(XFS_IS_PQUOTA_ON(mp) && (ip)->i_pdquot == NULL))
|
||||
|
||||
#define XFS_IS_DQDETACHED(ip) \
|
||||
((ip)->i_udquot == NULL && \
|
||||
(ip)->i_gdquot == NULL && \
|
||||
(ip)->i_pdquot == NULL)
|
||||
|
||||
#define XFS_QM_NEED_QUOTACHECK(mp) \
|
||||
((XFS_IS_UQUOTA_ON(mp) && \
|
||||
(mp->m_sb.sb_qflags & XFS_UQUOTA_CHKD) == 0) || \
|
||||
|
@ -156,6 +156,8 @@ xfs_trans_mod_ino_dquot(
|
||||
unsigned int field,
|
||||
int64_t delta)
|
||||
{
|
||||
ASSERT(!xfs_is_metadir_inode(ip) || XFS_IS_DQDETACHED(ip));
|
||||
|
||||
xfs_trans_mod_dquot(tp, dqp, field, delta);
|
||||
|
||||
if (xfs_hooks_switched_on(&xfs_dqtrx_hooks_switch)) {
|
||||
@ -247,6 +249,8 @@ xfs_trans_mod_dquot_byino(
|
||||
xfs_is_quota_inode(&mp->m_sb, ip->i_ino))
|
||||
return;
|
||||
|
||||
ASSERT(!xfs_is_metadir_inode(ip) || XFS_IS_DQDETACHED(ip));
|
||||
|
||||
if (XFS_IS_UQUOTA_ON(mp) && ip->i_udquot)
|
||||
xfs_trans_mod_ino_dquot(tp, ip, ip->i_udquot, field, delta);
|
||||
if (XFS_IS_GQUOTA_ON(mp) && ip->i_gdquot)
|
||||
@ -962,6 +966,8 @@ xfs_trans_reserve_quota_nblks(
|
||||
|
||||
if (!XFS_IS_QUOTA_ON(mp))
|
||||
return 0;
|
||||
if (xfs_is_metadir_inode(ip))
|
||||
return 0;
|
||||
|
||||
ASSERT(!xfs_is_quota_inode(&mp->m_sb, ip->i_ino));
|
||||
xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
|
||||
|
Loading…
Reference in New Issue
Block a user