77 lines · c
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 9/* Quota counters for live quotacheck. */10struct xqcheck_dquot {11 /* block usage count */12 int64_t bcount;13 14 /* inode usage count */15 int64_t icount;16 17 /* realtime block usage count */18 int64_t rtbcount;19 20 /* Record state */21 unsigned int flags;22};23 24/*25 * This incore dquot record has been written at least once. We never want to26 * store an xqcheck_dquot that looks uninitialized.27 */28#define XQCHECK_DQUOT_WRITTEN (1U << 0)29 30/* Already checked this dquot. */31#define XQCHECK_DQUOT_COMPARE_SCANNED (1U << 1)32 33/* Already repaired this dquot. */34#define XQCHECK_DQUOT_REPAIR_SCANNED (1U << 2)35 36/* Live quotacheck control structure. */37struct xqcheck {38 struct xfs_scrub *sc;39 40 /* Shadow dquot counter data. */41 struct xfarray *ucounts;42 struct xfarray *gcounts;43 struct xfarray *pcounts;44 45 /* Lock protecting quotacheck count observations */46 struct mutex lock;47 48 struct xchk_iscan iscan;49 50 /* Hooks into the quota code. */51 struct xfs_dqtrx_hook qhook;52 53 /* Shadow quota delta tracking structure. */54 struct rhashtable shadow_dquot_acct;55};56 57/* Return the incore counter array for a given quota type. */58static inline struct xfarray *59xqcheck_counters_for(60 struct xqcheck *xqc,61 xfs_dqtype_t dqtype)62{63 switch (dqtype) {64 case XFS_DQTYPE_USER:65 return xqc->ucounts;66 case XFS_DQTYPE_GROUP:67 return xqc->gcounts;68 case XFS_DQTYPE_PROJ:69 return xqc->pcounts;70 }71 72 ASSERT(0);73 return NULL;74}75 76#endif /* __XFS_SCRUB_QUOTACHECK_H__ */77