/* * Directory tree accounting is implemented using project quotas, where * the project identifier is inherited from parent directories. * A statvfs (df, etc.) of a directory that is using project quota should * return a statvfs of the project, not the entire filesystem. * This makes such trees appear as if they are filesystems in themselves.
*/ void
xfs_qm_statvfs( struct xfs_inode *ip, struct kstatfs *statp)
{ struct xfs_mount *mp = ip->i_mount; struct xfs_dquot *dqp;
/* * If the device itself is read-only and/or in norecovery * mode, we can't allow the user to change the state of * quota on the mount - this would generate a transaction * on the ro device, which would lead to an I/O error and * shutdown.
*/
if (xfs_qm_validate_state_change(mp, uquotaondisk,
gquotaondisk, pquotaondisk)) {
if (xfs_has_metadir(mp))
xfs_warn(mp, "metadir enabled, please mount without any quota mount options"); else
xfs_warn(mp, "please mount with%s%s%s%s.",
(!quotaondisk ? "out quota" : ""),
(uquotaondisk ? " usrquota" : ""),
(gquotaondisk ? " grpquota" : ""),
(pquotaondisk ? " prjquota" : "")); return -EPERM;
}
if (XFS_IS_QUOTA_ON(mp) || quotaondisk) { /* * Call mount_quotas at this point only if we won't have to do * a quotacheck.
*/ if (quotaondisk && !XFS_QM_NEED_QUOTACHECK(mp)) { /* * If an error occurred, qm_mount_quotas code * has already disabled quotas. So, just finish * mounting, and get on with the boring life * without disk quotas.
*/
xfs_qm_mount_quotas(mp);
} else { /* * Clear the quota flags, but remember them. This * is so that the quota code doesn't get invoked * before we're ready. This can happen when an * inode goes inactive and wants to free blocks, * or via xfs_log_mount_finish.
*/
*needquotamount = true;
*quotaflags = mp->m_qflags;
mp->m_qflags = 0;
}
}
return 0;
}
/* * If the sysadmin didn't provide any quota mount options, restore the quota * accounting and enforcement state from the ondisk superblock. Only do this * for metadir filesystems because this is a behavior change.
*/ void
xfs_qm_resume_quotaon( struct xfs_mount *mp)
{ if (!xfs_has_metadir(mp)) return; if (xfs_has_norecovery(mp)) return;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.