quotacheck.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright (c) 2020-2024 Oracle. All Rights Reserved.
  4. * Author: Darrick J. Wong <djwong@kernel.org>
  5. */
  6. #ifndef __XFS_SCRUB_QUOTACHECK_H__
  7. #define __XFS_SCRUB_QUOTACHECK_H__
  8. /* Quota counters for live quotacheck. */
  9. struct xqcheck_dquot {
  10. /* block usage count */
  11. int64_t bcount;
  12. /* inode usage count */
  13. int64_t icount;
  14. /* realtime block usage count */
  15. int64_t rtbcount;
  16. /* Record state */
  17. unsigned int flags;
  18. };
  19. /*
  20. * This incore dquot record has been written at least once. We never want to
  21. * store an xqcheck_dquot that looks uninitialized.
  22. */
  23. #define XQCHECK_DQUOT_WRITTEN (1U << 0)
  24. /* Already checked this dquot. */
  25. #define XQCHECK_DQUOT_COMPARE_SCANNED (1U << 1)
  26. /* Already repaired this dquot. */
  27. #define XQCHECK_DQUOT_REPAIR_SCANNED (1U << 2)
  28. /* Live quotacheck control structure. */
  29. struct xqcheck {
  30. struct xfs_scrub *sc;
  31. /* Shadow dquot counter data. */
  32. struct xfarray *ucounts;
  33. struct xfarray *gcounts;
  34. struct xfarray *pcounts;
  35. /* Lock protecting quotacheck count observations */
  36. struct mutex lock;
  37. struct xchk_iscan iscan;
  38. /* Hooks into the quota code. */
  39. struct xfs_dqtrx_hook qhook;
  40. /* Shadow quota delta tracking structure. */
  41. struct rhashtable shadow_dquot_acct;
  42. };
  43. /* Return the incore counter array for a given quota type. */
  44. static inline struct xfarray *
  45. xqcheck_counters_for(
  46. struct xqcheck *xqc,
  47. xfs_dqtype_t dqtype)
  48. {
  49. switch (dqtype) {
  50. case XFS_DQTYPE_USER:
  51. return xqc->ucounts;
  52. case XFS_DQTYPE_GROUP:
  53. return xqc->gcounts;
  54. case XFS_DQTYPE_PROJ:
  55. return xqc->pcounts;
  56. }
  57. ASSERT(0);
  58. return NULL;
  59. }
  60. #endif /* __XFS_SCRUB_QUOTACHECK_H__ */