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